Image présente dans de nombreuses vues : CALayer ?

Bonjour,


 


dans la doc de Core Animation, il est dit que si une image est utilisée plusieurs fois, il peut être utile d'utilise des CALayer ("The layer uses the image object you provide directly and does not attempt to create its own copy of that image."). J'ai du mal à  comprendre pourquoi.


 


En effet, si toutes les UIImageView font référence à  la même UIImage, il n'y aura pas de problème de copy de l'image. Non ?


 


Autre question : en pratique, lorsqu'une image n'a pas besoin des mécanismes des vues, y a-t-il un réel gain à  se prendre la tête avec des CALayer au lieu des UIView ? Un des défauts des CALayer étant qu'ils ne peuvent pas être associés à  des contraintes.


 


 


Citation dans son contexte :



 


 



Using an Image for the Layer's Content

Because a layer is just a container for managing a bitmap image, you can assign an image directly to the layer's contents property. Assigning an image to the layer is easy and lets you specify the exact image you want to display onscreen. The layer uses the image object you provide directly and does not attempt to create its own copy of that image. This behavior can save memory in cases where your app uses the same image in multiple places.


The image you assign to a layer must be a CGImageRef type. (In OS X v10.6 and later, you can also assign an NSImage object.) When assigning images, remember to provide an image whose resolution matches the resolution of the native device. For devices with Retina displays, this might also require you to adjust thecontentsScale property of the image. For information on using high-resolution content with your layers, see â€œWorking with High-Resolution Images.”



 


Réponses

  • AliGatorAliGator Membre, Modérateur

    un CALayer gère juste le rendu graphique à  l'écran. Une UIView contient un layer pour sa représentation graphique, mais ajoute les possibilités en particulier de gestion des events ou de contraintes.


     


    Un CALayer fonctionne directement avec la carte graphique en général quand c'est possible. Un CATileLayer par exemple a l'avantage de ne créer la texture (au sens OpenGL) qu'une seule fois et la transférer à  la mémoire vidéo et au processeur graphique qu'une seule fois, pour faire le rendu autant de fois que nécessaire façon texture/pattern ou façon tampons. Alors que sinon y'a des chances que l'image soit copiée de la mémoire du CPU vers la mémoire vidéo et le processeur graphique à  chaque fois qu'elle a à  être rendue à  l'écran.


     


    Ce sont des optimisations d'assez bas niveau, pour optimiser le rendu et l'utilisation du GPU en général. C'est aussi pratique pour tout ce qui est animation, effets, etc, qui travaillent directement sur le rendu graphique de façon plus performante.


Connectez-vous ou Inscrivez-vous pour répondre.