Según la documentación de UIVIew @property(nonatomic) CGFloat alpha
El valor de esta propiedad es un número de punto flotante en el rango de 0.0 a 1.0, donde 0.0 representa totalmente transparente y 1.0 representa totalmente opaco. Este valor afecta solo a la vista actual y no afecta a ninguna de sus subvistas integradas.
Tengo una vista de contenedor configurada de la siguiente manera:
self.myView.backgroundColor = [UIColor blackColor];
self.myView.alpha = 0.5;
[self addSubview:self.myView];
Y luego agregue subvistas a 'myView'
[myView addSubView anotherView];
anotherView.alpha = 1;
NSLog(@"anotherView alpha = %f",anotherView.alpha); // prints 1.0000 as expected
Pero ' anotherView ' tiene alfa en la pantalla (no es opaco como se esperaba)
¿Cómo puede ser esto y qué se puede hacer?
ios
objective-c
uiview
alpha-transparency
Avner Barr
fuente
fuente
self.myView
? y añadir anotherView tales como[self.self addSubview:self.myView];
alpha
valor que es el valor de todas las subvistasalpha
, multiplicado. por ejemplo, si el alfa subvistas0.8
y alfa del supervista era1.0
, pero lo cambia a0.6
, la alfa subvistas sigue siendo el mismo,0.8
. el valor alfa de la subvista renderizada se cambia solo de0.8
a0.48
.Respuestas:
Creo que esto es un error en la documentación. Debe archivarlo en bugreport.apple.com.
Todo lo que puedo ver después de una breve investigación sugiere que lo que está viendo es cómo siempre se ha comportado, y mis propias pruebas también lo demuestran.
El alfa de una vista se aplica a todas las subvistas.
Quizás todo lo que necesita es,
[[UIColor blackColor] colorWithAlphaComponent:0.5]
pero si no, tendrá que hacer que la vista sea un hermano en lugar de un niño.fuente
No establezca el alfa directamente en la vista principal. En lugar de ello, utilice la siguiente línea de código que aplicará transparencia a la vista principal sin afectar a sus vistas secundarias.
[parentView setBackgroundColor: [[UIColor clearColor] colorWithAlphaComponent: 0.5]];
fuente
En rápido
view.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5)
ACTUALIZADO PARA SWIFT 3
view.backgroundColor = UIColor.white.withAlphaComponent(0.5)
fuente
Establecer la opacidad del color de fondo en lugar de alfa no afectará sus vistas secundarias.
O puede configurar mediante programación
var customView:UIView = UIView() customView.layer.opacity = 0.3
Eso es. Codificación feliz !!!
fuente
Si le gustan los guiones gráficos, coloque un
User Defined Runtime Attribute
para su vista enIdentity Inspector
:Key Path: backgroundColor
, por ejemploType: Color
,Value:
color blanco con opacidad 50%.fuente
La solución más simple como se discutió es cambiar el alfa de la siguiente manera: La versión actualizada para Xcode 8 Swift 3 es:
yourParentView.backgroundColor = UIColor.black.withAlphaComponent(0.4)
C objetivo:
yourParentView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];
Consulte los documentos para desarrolladores de Apple aquí: https://developer.apple.com/reference/uikit/uiview/1622417-alpha
fuente
En Swift 4.2 y Xcode 10.1
No agregue color y valor alfa a través del guión gráfico. En este caso, solo el enfoque programático funcionará.
transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.5)
fuente
Aquí hay una solución un poco compleja:
UIView *container; UIView *myView; UIView *anotherView; myView.alpha = 0.5; [container addSubview:myView]; anotherView.alpha = 1; [container addSubview:anotherView];
Usar una
container
vista como supervistaanotherView
ymyView
ambas son subvista encontainer
,anotherView
no es una subvista enmyView
.fuente
Por ahora, solo hay una forma de hacer que la Vista principal sea transparente y no coloque ninguna vista secundaria dentro (no ponga ninguna vista como subvista) la vista principal, coloque las vistas secundarias fuera de la vista principal. Para que la vista de los padres sea transparente, puede hacerlo a través del guión gráfico.
//Transparent the parentView parentView.backgroundColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.8)
Coloque la otra vista fuera de la vista principal. Funcionará de maravilla.
fuente
Consulte la descripción en negrita de la documentación de Xcode.
fuente