J'ai eu quelques difficultés à animer l'opacité d'une grande quantité (centaines) de petites CALayers
. J'utilisais Core Animation mais je suis allé jusqu'à utiliser CVDisplayLink
pour améliorer cela. Ce que j'ai trouvé, c'est que le fait de séparer toutes ces couches et d'animer leurs opacités produit de très mauvaises performances. Dans le code de mise à jour d'affichage, je voudrais simplement faire:Les performances d'animation de centaines de changements CALayers en fonction de la hiérarchie
for layer in layersToAnimateIn {
layer.opacity = newOpacity
}
déplacement de toutes ces couches dans un contenant plus couche et animant son opacité semble gérer beaucoup mieux.
containingLayer.opacity = newOpacity
Depuis que je traite avec la même quantité de couches dans chaque cas, et l'effet visuel est identique, quelqu'un pourrait-il expliquer pourquoi la performance change de façon spectaculaire? Le système se heurte évidemment à la modification de l'opacité de centaines de couches par rafraîchissement d'écran.
Merci pour la perspicacité, Noah. Bon point sur les animations implicites, j'avais sauté dessus. Fait intéressant, cependant, quand je les ai désactivés, la performance est restée à peu près la même. Le problème doit avoir à voir avec le côté du modèle de données comme vous l'avez mentionné au début. – Ricky