Animation du changement de taille de CAShapeLayer
Je suis en dessinant un cercle avec un rayon de 200
self.circle = [CAShapeLayer layer];
self.circle.fillColor = nil;
self.circle.strokeColor = [UIColor blackColor].CGColor;
self.circle.lineWidth = 7;
self.circle.bounds = CGRectMake(0, 0, 2 * radius, 2 * radius);
self.circle.path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.radius, self.radius)
Quelqu'un peut-il me dire comment animer un changement à un rayon de 100?
source d'informationauteur Jonathan
Vous devez vous connecter pour publier un commentaire.
C'est comment j'ai fini par le faire:
Grâce à Jacob pour me pointer dans la bonne direction.
C'est, je crois, la plus simple et la meilleure façon de le faire:
J'ai eu cette approche de la La Documentation d'Apple ici (Voir la liste 3-2). Les choses importantes sont ici que de la configuration de la
fromValue
et aussi le réglage de la valeur finale pourself.circle
'spath
ànewPath.CGPath
droit après avoir configuré l'animation. Une animation ne change pas la valeur sous-jacente du modèle, donc dans l'autre approche, vous n'êtes pas en train de faire un changement permanent de la forme de la couchepath
variable.J'ai utilisé une solution comme la réponse choisie par le passé (à l'aide de
removedOnCompletion
etfillMode
etc) mais j'ai constaté que sur certaines versions de l'iOS, ils ont causé des fuites de mémoire, et aussi, parfois, cette approche ne fonctionne pas pour une raison quelconque.Avec cette approche, vous êtes en train de créer l'animation explicitement (à la fois, où elle commence et où elle se termine), et vous êtes à la spécification de la dernière valeur permanente pour le chemin à la fin (avec la dernière ligne), de sorte qu'il n'y a pas besoin de jouer avec pas de retrait de l'animation quand il se termine (qui je crois est ce qui conduit à des fuites de mémoire si vous faites cela, l'animation d'un grand nombre de fois... la unremoved animations construire en mémoire).
Aussi, j'ai enlevé l'animation de la
bounds
parce que vous n'en avez pas besoin pour animer le cercle. Même si le chemin est tracé à l'extérieur des limites de la couche, ça va encore être entièrement affiché (voir la documentation pourCAShapeLayer
à ce sujet). Si vous avez besoin d'animer les limites pour une autre raison, vous pouvez utiliser la même approche (en prenant soin de spécifier lafromValue
et la valeur finale de limites).Vous pouvez utiliser un
CAAnimationGroup
pour animer labounds
etpath
de votreCAShapeLayer
:Ici est une conséquence directe de conversion rapide de Jonathan code si quelqu'un en a besoin.