2010-10-15 21 views
3

J'ai un tas de calayers identiques que je veux réutiliser. Souvent, quelques-uns d'entre eux devraient disparaître, puis être réutilisés dans une autre position dans la même super-couche (une demi-seconde plus tard).Comment conserver CALayers en vue de sa réutilisation?

Quelle est la meilleure façon (sur le plan des performances) de les conserver alors qu'ils ont disparu de l'écran? setHidden: YES ou setOpacity: 0 ou removeFromSuperLayer? Ou quelque chose d'autre que je ne pense pas?

(Il y a environ 12 cercles identiques en forme CALayers avec le contenu d'un UIImage, et environ 30 CAShapeLayers chacun tenant juste un segment de ligne -Bien habituellement dans différents orientations-)

+0

J'ai fini par utiliser setOpacity: 0, et la performance semble être bien meilleure de cette façon. Je n'ai pas de preuves définitives, mais si vous rencontrez des problèmes de performance, vous pouvez essayer. – baris

Répondre

0

Vous devez utiliser un nsset ou NSArray à maintenir une file d'attente de calayers inutilisés. Le processus serait similaire à ce que vous faites en utilisant des tablecells.

Lorsque chaque calayer est retiré de SuperLayer, placez-le dans votre appareil et sortez-en un de l'appareil lorsque vous en avez besoin.

+0

Merci, mais je fais déjà quelque chose de similaire. Ce que je veux vraiment savoir, c'est si vous devez garder la couche comme sous-couche d'une couche déjà à l'écran (et la cacher ou la rendre complètement transparente) ou la supprimer complètement pour que le matériel graphique puisse la "mettre en cache" meilleur. – baris

+0

Cacher le calque ou le rendre transparent va probablement vous voler quelques fps. Il est préférable de laisser la couche de lumière allumée. Donc, je suggérerais removefromsuperlayer toujours lorsqu'il n'est pas utilisé. – Amanuel

0

Les trois que vous avez mentionnés semblent être toutes les choses raisonnables à essayer. Vous devriez vraiment tester chacun et voir ce qui donne à votre application la meilleure performance, les résultats pourraient vous surprendre.

+0

Je n'ai pas été en mesure d'obtenir la performance que je veux avec l'un d'eux. Je ferai un test plus «scientifique» quand j'apprendrai à utiliser les instruments plus efficacement. Je les ai essayés avec l'instrument Core Animation, mais la chose amusante est que mon FPS semble être correct avec chacun d'entre eux - mais je peux remarquer que l'une de mes animations saute (pas mal) de frames. – baris

+0

Essayez d'utiliser l'instrument d'échantillonnage ou d'utiliser Shark. –