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
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.
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).
- 1. Quando utilizzare limit e quando non su
- 2. Masking un CALayer con un altro CALayer
- 3. Quando utilizzare Request.Cookies su Response.Cookies?
- 4. Quando utilizzare StringProperty su String?
- 5. iPhone - Bordi frastagliati quando si applica la prospettiva a CALayer
- 6. Non può compilare il codice quando si lavora con CALayer
- 7. animazione liscia quando si anima shadowPath di un CALayer
- 8. CALayer, NSTextView e ridimensionamento
- 9. CALayer renderInContext
- 10. Quando è necessario impostare la proprietà contentsScale di un CALayer?
- 11. eccezione Uncaught: posizione CALayer contiene NaN quando si fa animazione
- 12. Ottimizzazioni del CALayer?
- 13. CALayer non ridimensionante con Autolayout
- 14. colori compositi: modalità CALayer e fusione su iPhone
- 15. Disegno grafica personalizzata su iPhone: CALayer vs CGContext
- 16. Decidere su quando utilizzare XmlDocument contro XmlReader
- 17. Quando utilizzare intern() su stringhe letterali
- 18. Quando utilizzare ServiceLoader su qualcosa come OSGi
- 19. Quando utilizzare runat = "server" su normale HTML
- 20. JQuery su JavaScript Perché e quando utilizzare?
- 21. Obiettivo C quando utilizzare alloc e quando non su
- 22. CALayer renderInContext: causa incidente sconosciuto
- 23. Quando utilizzare JMS e quando utilizzare REST?
- 24. CATiledLayer to CALayer
- 25. aggiungi UIImage in CALayer
- 26. Masking a CALayer - iPhone
- 27. Animazione opacità CALayer
- 28. Aggiungere testo a CALayer
- 29. CALayer dissolvenza dal valore corrente
- 30. Come ottenere un evento di tocco su un CALayer?
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. –
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
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. –