2012-05-04 8 views
19

La proprietà opaque di un UIView è sempre impostata su "SÌ". Ma il riferimento alla classe UIView lo dice:Proprietà opaca UIView

Si prevede che una vista opaca riempi i limiti con un contenuto completamente opaco, ovvero il contenuto dovrebbe avere un valore alfa di 1.0. Se la vista è opaca e non riempie i suoi limiti o contiene contenuti interamente o parzialmente trasparenti, i risultati sono imprevedibili.

Dal cambiando la alpha di vista è abbastanza comune, soprattutto durante le transizioni o animazioni, quindi la dichiarazione di cui sopra implica che si deve sempre impostare manualmente opaque-NO se avete intenzione di modificare la proprietà alpha pure.

Ma non ho mai regolato manualmente opaque e non ho avuto alcun sintomo evidente. Quanto è necessario fare questa considerazione?

risposta

12

La risposta è che iOS è abbastanza intelligente da riconoscere che se la tua vista è alpha inferiore a 1, è necessario disegnare il contenuto dietro la tua vista, indipendentemente dalla proprietà opaque della vista.

In risposta ai commenti: dalla mia sperimentazione limitata, non credo che la proprietà opaque della vista abbia alcun effetto. (Penso che la documentazione sia sbagliata.) La proprietà opaque del livello della vista ha un effetto: controlla se lo CGContext passato a drawRect: ha un canale alfa. Se la proprietà opaque del livello è SÌ, il contesto non ha un canale alfa (e viene trattato come se ogni pixel avesse un alfa di 1.0).

La modifica della proprietà opaque della vista non ha alcun effetto sulla proprietà opaque del livello. Ciò è diverso dalla (ad esempio) proprietà della vista alpha, che è solo un wrapper per la proprietà opacity del livello.

In teoria, avendo documentato che la proprietà opaque consente loro di ottimizzare il disegno, Apple potrebbe implementare tale ottimizzazione in futuro. In pratica, fare ciò probabilmente romperebbe molte app, quindi probabilmente non applicheranno tali modifiche alle app collegate agli SDK precedenti. (Hanno la capacità di far sì che UIKit si comporti in modo diverso a seconda della versione con cui l'app è stata collegata.)

+3

Ma questo non risponde alla domanda ... come @andrewx ha detto: Se si ignorano i documenti e si usano le aree trasparenti con 'opacity = SÌ' tutto sembra andare bene. Oltre al fatto che i documenti sarebbero sbagliati, l'ottimizzazione basata sul valore della proprietà descritto nella documentazione (non pubblicata) sembra non aver luogo affatto. O se lo fa, non è propriamente descritto dai documenti. Domanda per me è: dovrei prendermi cura della proprietà e se sì perché? Prestazione? Potrebbe esserci un cattivo rendering se non lo faccio? Qualche esperienza a qualcuno? Riproducibile? –

+1

Sono d'accordo, questo è ancora irrisolto per me. se iOS è abbastanza intelligente da ignorare la proprietà opaca, allora qual è lo scopo di questa proprietà per cominciare? – johnbakers

+1

@rob mayoff Grazie per la modifica. Ho fatto alcuni test in quest'ultima ora e ho osservato esattamente quello che descrivi.Ho un'app con una schermata a scorrimento a schermo intero che contiene scorecollari più piccoli come linee, ciascuna contenente molte sottoview, con molte sottoview con sfondi trasparenti e persino ombre esterne. Abbiamo riscontrato alcuni problemi di prestazioni con lo scorrimento, abbiamo risolto eliminando la trasparenza e le ombre. Tuttavia, per i miei test ora ho attivato/disattivato la trasparenza, le ombre e la proprietà opaca: in nessuna configurazione il cambiamento del puntello opaco ha avuto alcun effetto sul corretto rendering, prestazioni o utilizzo della memoria. –

1

Finché la vista non si presenta al contenuto (non le sue sottoview), l'alfa è a posto. Pertanto, se si avvia UIImageViews con un'immagine PNG con alpha, opaque verrà impostato automaticamente su NO.

Normalmente non sono necessarie molte visualizzazioni non opache. Ma alfa della vista completa è comunque molto diversa.