2011-12-20 6 views
24

Nel mio esempio, ho 3 visualizzazioni: una vista rossa contenente due viste bianche. Io cambio l'alpha della vista del contenitore rosso a 0.3 e questo succede (guarda l'immagine, il risultato corrente).iOS che controlla il comportamento alfa di UIView per le sottoview

Vedendo questo, posso solo assumere (dimmi se ho torto) che impostando l'alfa di una vista si imposteranno anche tutti gli alfa delle sue sottoview. La mia domanda è: c'è un modo per dire semplicemente alla vista rossa di agire nel suo complesso in modo che impostando il suo alfa si darebbe qualcosa che assomiglia al risultato desiderato (nell'immagine)?

results

Questo è ciò che sembra senza alpha:

enter image description here

+0

Nel suo "risultato voluto" vuoi vedere sfondo con vista whwite e rossi o no? Altrimenti dovresti usare il colore personalizzato con alpha 1. Le sottoview "ereditano" alfa da superview. Un altro modo in cui puoi provare sono i livelli, ma non ne sono sicuro. –

risposta

12

Scopri i possibili chiavi UIKit per Info.plist, specificamente UIViewGroupOpacity.

UIViewGroupOpacity (Boolean - iOS) specifica se Core Animation sottolivelli ereditano l'opacità del loro superlayer.

Info.plist UIKit Keys

+0

Secondo i documenti, la chiave non è di default e non ereditare. Questo è strano? Il comportamento predefinito deve essere ereditato. http://developer.apple.com/library/ios/#documentation/general/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW6 – Robert

+0

Corretto - Non capisco questo o. Se non voglio ereditarietà, devo impostare la chiave su SÌ o NO? Ho detto "NO" e questo non ha risolto i miei problemi. – user798719

20

Per approfondire risposta di Marco: Se si imposta UIViewGroupOpacity nel Info.plist, cambierà il comportamento per tutte le viste nella vostra applicazione, se siete interessati solo fissa il rendering di questo vista particolare, si potrebbe anche usare questo frammento:

redContainerView.layer.shouldRasterize = YES; 
// No setting rasterizationScale, will cause blurry images on retina. 
redContainerView.layer.rasterizationScale = [[UIScreen mainScreen] scale]; 
+1

Mi hai reso così felice. –

14

IOS proprietà alpha viene ereditata dai suoi subviews. Se stiamo impostando alpha 0.3 per la visualizzazione rossa, entrambe le sottoview avranno l'alpha = 0.3. Non c'è modo di impedire a subview di ereditare il valore alfa dalla sua super vista.

La soluzione potrebbe essere. È possibile impostare il colore della vista rossa con alpha 0.3. La proprietà color non sarà ereditata dalla sottoview. Yor può utilizzare sotto codice

[redView setBackgroundColor:[UIColor colorWithHue:238.0f/255.0f saturation:24.0f/255.0f brightness:24.0f/255.0f alpha:0.3]]; 
+0

risposta migliore imo. – user1563544

+1

Risposta assolutamente migliore. Il concetto che il colore ha alfa e la vista ha alfa, ognuno con comportamenti diversi, è piuttosto importante. – Richard

+0

Il valore alfa non è ereditato dalle subview – lazi74