Quelles sont les différences entre un UIView et un CALayer?

103

Les deux ont la plupart des mêmes attributs, les deux prennent en charge différents types d'animations, les deux représentent des données différentes. Quelles sont les différences entre un UIView et un CALayer?

Oleg Danu
la source

Réponses:

224

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.

Brad Larson
la source
40

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!

Tapis
la source
33

En termes simples, UIView hérite de UIResponder, gère les événements des utilisateurs, contient CALayer, qui hérite de NSObject, se concentre principalement sur le rendu, l'animation, etc.

Forrest
la source
7

UIViewest un conteneur pour CALayers. Utilisation UIKit.

CALayeroù 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 CALayerssont 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.

UIViewavoir 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, tochesStartcomme des événements et d'autres UIKitfonctionnalités.

Pour travailler avec, CALayersutilisez les connaissances de Core Graphics.Pour toute vue, le rendu simple UIViewsuffit.

Gobi M
la source
0

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.

musixlemon
la source
0

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

Anit Kumar
la source