Question Quand utiliser CALayer sur Mac / iPhone?


Je suis un peu confus quand utiliser CALayer sur iPhone ou Mac et quand ne pas l'utiliser? CoreAnimation fonctionne très bien sur mes objets basés sur UIView sans avoir à utiliser CALayer. Quand est-il temps de creuser dans cette classe?


20
2017-09-19 02:56


origine


Réponses:


Dans mes tests, UIView et CALayer offrent à peu près le même niveau de performance sur l’iPhone. Comme le mentionne rpetrich dans son commentaire, UIViews est une mince enveloppe autour de CALayers. Sur Mac, les CALayers sont beaucoup plus légers que NSViews.

Comme le souligne Ben, vous pouvez aller au-delà des capacités des animations implicites en travaillant directement avec CALayers, en fournissant même des effets 3D via CATransform3D. Dans de nombreux cas, vous pouvez le faire même avec vos vues standard en accédant à la couche de sauvegarde (si la vue est calquée).

Le code multi-plateforme (Mac / iPhone) est une autre préoccupation. Mon application iPhone utilise une interface tout-CALayer pour sa vue principale en grande partie parce que je peux utiliser exactement le même code pour dessiner cette interface dans son homologue Mac. Pour un autre exemple de cela, je vous dirige vers le Cadre de base, qui dessine des graphiques entièrement à l'aide de CALayers et fonctionne sur Mac et iPhone. Les CALayers sont pratiquement les mêmes sur les deux plates-formes, où UIView et NSView ont des interfaces très différentes.


36
2017-09-19 18:40



Si vous pouvez faire ce que vous voulez avec une «animation implicite» (celle proposée par UIKit / AppKit sans avoir à fouiller dans les CA, les calques et les animateurs), alors optez pour cette voie.

CoreAnimation entre en jeu lorsque vous utilisez des animations plus complexes, telles que des mouvements non linéaires ou des effets répétés, ainsi que certains effets synchronisés. Il y a BEAUCOUP de choses à faire avec, mais c'est un outil très robuste (avec une courbe d'apprentissage proportionnée, du moins comparée à celle d'UIKit).


4
2017-09-19 03:22