web-dev-qa-db-fra.com

Quand dois-je définir layer.shouldRasterize sur YES

J'ai vu des correctifs pour certains problèmes de décalage en définissant la propriété de couche de la vue

view.layer.shouldRasterize = YES;

J'ai vu une grande différence de performances lors de l'utilisation d'un UICollectionView et de la préparation des cellules et de la définition de la propriété.

Je ne sais pas quelles sont les implications.

Ce serait génial d'avoir une explication. Merci!

45
Avner Barr

Dans WWDC 2012 Polishing Your Interface Rotations video (abonnement développeur payant nécessaire), ils parlent des avantages et des implications de la pixellisation des couches. Cette vidéo est sur un sujet différent (intéressant, cependant), mais ils parlent des avantages et des inconvénients de la pixellisation par rapport à l'instantané (à partir d'environ 8 minutes dans la vidéo, ils donnent un aperçu des relations entre les UIView hiérarchie, l'arborescence de présentation et l'arborescence de rendu, puis plongez dans une discussion sur la pixellisation encore 6 minutes dans la vidéo).

En résumé, si vous avez une vue complexe (c'est-à-dire relativement coûteuse à restituer) que vous animez, mais pour laquelle la vue animée ne change pas elle-même, la pixellisation du calque peut améliorer les performances en ne restituant pas le calque tout le temps . Mais cela se fait au détriment de la mémoire (sauvegarde d'une image tramée en mémoire).

Mais, si vous animez un changement dans le calque, le shouldRasterize peut nuire aux performances (car il va re-pixelliser le calque pour chaque image de l'animation).

En général, si vous animez un ensemble complexe de calques qui eux-mêmes ne changent pas, vous pouvez définir shouldRasterize sur YES, faire l'animation, puis désactiver shouldRasterize.

55
Rob