Réponses:
Sur iOS, chaque UIView est soutenu par un CALayer Core Animation, vous avez donc affaire à des CALayers lorsque vous utilisez un UIView, même si vous ne le réalisez peut-être pas. Contrairement à NSViews sur Mac, qui a évolué avant l'existence de Core Animation, les UIViews sont destinées à être des wrappers légers autour de ces CALayers.
Comme je le décris dans la question similaire "Quand utiliser CALayer sur Mac / iPhone?" , travailler directement avec CALayers ne vous donne pas des avantages significatifs en termes de performances par rapport à UIViews. L'une des raisons pour lesquelles vous souhaiterez peut-être créer un élément d'interface utilisateur avec CALayers au lieu d'UIViews est qu'il peut être très facilement porté sur le Mac. Les UIViews sont très différentes des NSViews, mais les CALayers sont presque identiques sur les deux plates-formes. C'est pourquoi le framework Core Plot présente ses graphiques à l'aide de CALayers au lieu d'autres éléments d'interface utilisateur.
Une chose qu'UIViews fournit sur CALayers est la prise en charge intégrée de l'interaction utilisateur. Ils gèrent les tests de frappe sur les touches et autres actions connexes que vous auriez besoin de créer vous-même si vous gérez une hiérarchie de CALayers. Ce n'est pas si difficile de l'implémenter vous-même, mais c'est du code supplémentaire que vous devez écrire lors de la construction d'une interface uniquement CALayer.
Vous aurez souvent besoin d'accéder aux couches sous-jacentes pour un UIView lors de l'exécution d'animations plus complexes que ne le permet la classe UIView de base. Les capacités d'animation d'UIView se sont développées au fur et à mesure que le SDK iOS a mûri, mais il reste encore quelques choses à faire en interagissant avec le CALayer sous-jacent.
Du blog Ray Wenderlich ( Tutoriel )
Les CALayers sont simplement des classes représentant un rectangle à l'écran avec un contenu visuel. «Mais attendez une sacrée minute», pourriez-vous dire, «c'est à ça que sert UIViews!» C'est vrai, mais il y a une astuce à cela: chaque UIView contient une couche racine sur laquelle il dessine!
UIView
est un conteneur pour CALayers
. Utilisation UIKit
.
CALayer
où nous dessinons le contenu. En utilisantCoreGraphics
Si vous travaillez avec un contrôle personnalisé comme des fonctionnalités, il serait bon de continuer avec une vue unique contenant plus de couches pour un rendu natif précis. Depuis CALayers
sont en apesanteur que UIView
.
Pour créer un squelette commun pour Mac et iOS, suivez la conception de votre application à l'aide de CALayers
. Puisqu'il est disponible dans les deux plates-formes.
UIView
avoir des fonctionnalités telles que des événements tactiles réalisés à l'aide de délégués -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
, tochesStart
comme des événements et d'autres UIKit
fonctionnalités.
Pour travailler avec, CALayers
utilisez les connaissances de Core Graphics.Pour toute vue, le rendu simple UIView
suffit.
La grande différence est que UIView est conçu pour CocoaTouch sur un appareil mobile. Il ajoute un gestionnaire d'événements que CALayer n'a pas fourni.
UIView: les vues ont des dispositions de hiérarchie plus complexes. Ils peuvent recevoir des interactions utilisateur telles que des tapotements, des pincements, des clics et plus encore. Travailler avec UIViews se produit sur le thread principal, cela signifie qu'il utilise la puissance du processeur.
CALayer: les couches ont une hiérarchie plus simple. Cela signifie qu'ils sont plus rapides à résoudre et plus rapides à dessiner sur l'écran. Il n'y a pas de surcharge de chaîne de répondeurs contrairement aux vues. Les couches sont dessinées directement sur le GPU. Cela se produit sur un thread séparé sans alourdir le CPU.
Pour plus de détails: https://medium.com/@fassko/uiview-vs-calayer-b55d932ff1f5