2009-09-19 19 views
18

Sono un po 'confuso quando uso CALayer su iPhone o Mac e quando non lo uso? CoreAnimation funziona perfettamente sugli oggetti basati su UIView senza dover utilizzare CALayer. Qual è il momento giusto per approfondire questo corso?Quando utilizzare CALayer su Mac/iPhone?

risposta

35

Nei miei benchmark, UIView e CALayer forniscono lo stesso livello di prestazioni su iPhone. Come Rpetrich menziona nel suo commento, le UIViews sono un sottile involucro attorno ai CALayer. Su Mac, i CALayer sono molto più leggeri di NSViews.

Come sottolinea Ben, è possibile andare oltre le capacità delle animazioni implicite lavorando direttamente con CALayers, fornendo anche alcuni effetti 3D tramite CATransform3D. In molti casi, puoi farlo anche con le viste standard accedendo al livello di supporto (se la vista è protetta dal livello).

Un'altra preoccupazione è il codice multipiattaforma (Mac/iPhone). My iPhone application utilizza un'interfaccia all-CALayer per la sua vista principale in gran parte perché posso usare lo stesso identico codice per disegnare quell'interfaccia nella sua controparte Mac. Per un altro esempio, ti indirizzo allo Core Plot framework, che disegna i grafici interamente utilizzando CALayers e funziona sia su Mac che su iPhone. I CALayer sono praticamente gli stessi su entrambe le piattaforme, dove UIView e NSView hanno interfacce molto diverse.

4

Se si può fare ciò che si desidera con "animazione implicita" (quella offerta da UIKit/AppKit senza dover scavare in CA, livelli e animatori), allora sicuramente seguire questa strada.

CoreAnimation entra in gioco quando si iniziano a utilizzare animazioni più complesse, come il movimento non lineare o ripetizione di effetti e alcuni effetti sincronizzati. C'è un sacco che puoi fare con esso, ma è uno strumento abbastanza pesante (con una curva di apprendimento commisurata, almeno rispetto alla roba UIKit).

+3

Penso che questa affermazione sia fuorviante. Il livello di astrazione fornito da Core Animation è notevole. L'API è molto facile da raccogliere e lavorare con. Capisco che lo stai confrontando con UIKit, ma definendolo 'heavy duty' e usando le parole 'learning curare' è scoraggiante e penso che sia fuorviante. La Guida alla Programmazione di Animazione di base potrebbe comunque funzionare con un po 'di lavoro. –

+2

Sono d'accordo con Joe; Gli UIViews sono solo un sottile involucro su CALayer e UIResponder. Se non fosse per Interface Builder, i CALayer non sarebbero molto più difficili da gestire rispetto a UIViews (e per chiunque sviluppi su OpenGL, entrambi sono notevolmente semplificati) – rpetrich

+2

okay, forse ero un po 'severo nella mia descrizione: CoreAnimation È fantastico, e facile una volta capito. Tuttavia, è un ordine di grandezza più lavoro che semplicemente il wrapping di un setFrame: messaggio nelle chiamate di animazione begin/commit. –

Problemi correlati