ios objective-c uiview alpha-transparency

ios - Al establecer alfa en UIView, se establece el alfa en sus subvistas, lo que no debería ocurrir.



objective-c alpha-transparency (8)

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];

Utilice una vista de container como superview, anotherView y myView son myView en container , anotherView no es una myView en myView .

De acuerdo con la documentación para 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 agregar 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?


Creo que esto es un error en la documentación. Debe archivarlo en bugreport.apple.com.

Todo lo que puedo ver después de un poco de investigación rápida sugiere que lo que están 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 necesitas es [[UIColor blackColor] colorWithAlphaComponent:0.5] pero si no, necesitarás que la vista sea un hermano en lugar de un niño.


Establecer la opacidad del color de fondo en lugar de alfa no afectará sus vistas secundarias.

  1. seleccione ver
  2. ir al inspector de atributos que el color de fondo
  3. haga clic en "otros"
  4. establecer la opacidad al 30%

O puede establecer por programación

var customView:UIView = UIView() customView.layer.opacity = 0.3

Eso es. Feliz codificacion !!!


La solución más sencilla como se comentó es cambiar el alfa de la siguiente manera: La versión actualizada de Xcode 8 Swift 3 es:

yourParentView.backgroundColor = UIColor.black.withAlphaComponent(0.4)

C objetivo:

yourParentView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5];

Consulte Apple Developer Docs aquí: https://developer.apple.com/reference/uikit/uiview/1622417-alpha


No establezca el alfa directamente en la vista principal. En lugar de utilizar la línea de código que se encuentra a continuación, se aplicará la transparencia a la vista principal sin afectar sus vistas secundarias.

[parentView setBackgroundColor: [[UIColor clearColor] colorWithAlphaComponent: 0.5]];


Por ahora, solo hay una manera de hacer que la Vista principal sea transparente y no coloque ninguna vista secundaria dentro (no coloque ninguna vista como subvista) en la vista principal, ponga esa vista secundaria 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á a la perfección.


Si te gustan los guiones gráficos, coloca un User Defined Runtime Attribute para tu vista en el Identity Inspector :

Key Path: backgroundColor Type: Color Key Path: backgroundColor , Type: Color , Value: por ejemplo, color blanco con opacidad al 50%.


En veloz

view.backgroundColor = UIColor.whiteColor().colorWithAlphaComponent(0.5)

ACTUALIZADO PARA SWIFT 3

view.backgroundColor = UIColor.white.withAlphaComponent(0.5)