Al establecer alfa en UIView, se establece el alfa en sus subvistas, lo que no debería suceder

De acuerdo con la documentation para UIVIew @property(nonatomic) CGFloat alpha

El valor de esta propiedad es un número de punto flotante en el range 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 subbases incrustadas.

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 agrega subvenciones 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 opaca como se esperaba)

¿Cómo puede ser esto y qué se puede hacer?

Creo que esto es un error en la documentation. Debe archivarlo en bugreport.apple.com.

Todo lo que puedo ver después de un poco de investigación rápida sugiere lo que está viendo es cómo siempre se ha comportado, y mis propias testings lo demuestran también.

El alfa de una vista se aplica a todas las subvistas.

Quizás lo único 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.

No establezca el alfa directamente en la vista principal. En lugar de ello, use la siguiente línea de código que aplicará transparencia a parentview sin afectar sus vistas secundarias.

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

Si le gustan los guiones charts, coloque un User Defined Runtime Attribute para su vista en el Identity Inspector :

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

En swift

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

ACTUALIZADO PARA SWIFT 3

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

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 ambas subvista en container , anotherView no es una subvista en myView .

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 objective:

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

Consulte los documentos para desarrolladores de Apple aquí: https://developer.apple.com/reference/uikit/uiview/1622417-alpha