web-dev-qa-db-fra.com

Quelles sont les différences entre UIView et CALayer?

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

95
Oleg Danu

Sur iOS, chaque UIView est supporté par un Core Animation CALayer. Vous avez donc affaire à des CALayers lorsque vous utilisez un UIView, même si vous ne le réalisez pas. Contrairement à NSViews sur Mac, qui a évolué avant Core Animation, UIViews est conçu pour être des wrappers légers autour de ces CALayers.

Comme je le décris dans la même question "Quand utiliser CALayer sur Mac/iPhone?" , travailler directement avec CALayers ne vous confère pas d’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 de UIViews est qu'il peut très facilement être porté sur un Mac. UIViews est très différent de NSViews, mais les CALayers sont presque identiques sur les deux plates-formes. C'est pourquoi la structure Core Plot présente ses graphiques en utilisant CALayers au lieu d'autres éléments de l'interface utilisateur.

Une chose que UIViews fournit sur CALayers est un support intégré pour l’interaction de l’utilisateur. Ils gèrent les tests de contact sur des touchs et d'autres actions connexes dont vous auriez besoin pour vous construire si vous gérez une hiérarchie de CALayers. Ce n’est pas si difficile à implémenter vous-même, mais c’est un code supplémentaire que vous auriez besoin d’écrire pour construire une interface uniquement avec CALayer.

Vous aurez souvent besoin d'accéder aux couches sous-jacentes pour 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 fil de l'évolution du SDK iOS, mais il reste encore quelques choses à faire en interagissant avec le CALayer sous-jacent.

211
Brad Larson

Extrait du blog de Ray Wenderlich ( Tutorial )

Les CALayers sont simplement des classes représentant un rectangle à l'écran avec contenu visuel. "Mais attendez une minute," vous pouvez dire, "c'est C’est vrai, mais il ya un truc à ça: chaque UIView contient un calque racine qu'il dessine!

39
Mat

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. 

26
Forrest

UIView est un conteneur pour CALayers. Utilisation de UIKit.

CALayer où nous dessinons le contenu. Utiliser CoreGraphics

Si vous utilisez des fonctions de contrôle personnalisées, il serait intéressant de continuer avec une vue unique contenant plus de couches pour un rendu natif précis. Puisque 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. Depuis, il est disponible dans les deux plates-formes. 

UIView ayant des événements tactiles comme les événements tactiles obtenus à l'aide de délégués -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event, tochesStart comme des événements et d'autres fonctionnalités UIKit.

Pour utiliser CALayers, utilisez les connaissances de base de Core Graphics.Pour tout rendu de vue simple, UIView suffit. 

7
Gobi M

La grande différence est que UIView est conçu pour CocoaTouch sur un appareil mobile. Il ajoute des gestionnaires d’événements que CALayer n’a pas fournis.

0
musixlemon