J'essaie de créer une pièce de monnaie qui tombe. L'image de la pièce est une calayeuse avec 2 cabesicanimations à ce sujet - une chute et une rotation. Lorsque l'animation descendante arrive à sa fin, il y reste. L'animation de rotation cependant, qui est censée être aléatoire et se retrouver dans un angle différent à chaque fois, il suffit de retourner à l'image de Calayer d'origine.
Je veux qu'il reste dans l'angle, il a terminé l'animation sur. Est-il possible? Comment fait-on ça?
Code:
//Moving down animation:
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"];
anim.duration = 1;
anim.autoreverses = NO;
anim.removedOnCompletion = YES;
anim.fromValue = [NSNumber numberWithInt: -80 - row_height * (8 - _col)];
anim.toValue = [NSNumber numberWithInt: 0];
//Rotation Animation:
CABasicAnimation *rota = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
rota.duration = 4;
rota.autoreverses = NO;
rota.removedOnCompletion = NO;
rota.fromValue = [NSNumber numberWithFloat: 0];
rota.toValue = [NSNumber numberWithFloat: 2.5 * 3.15 ];
[cl addAnimation: rota forKey: @"rotation"];
[cl addAnimation: anim forKey: @"animateFalling"];
Avez-vous défini la propriété de l'enlèvement de l'animation de rotation vers no, par exemple,
rota.removedOnCompletion = NO;
Cela devrait quitter la couche de présentation où il s'agissait de la fin de l'animation. La valeur par défaut est oui, qui va revenir à la valeur du modèle, c'est-à-dire le comportement que vous décrivez.
Le FillMode devrait également être défini, c'est-à-dire
rota.fillMode = kCAFillModeForwards;
J'ai trouvé cela en définissant: removedOnCompletion = NO;
n'a pas produit de fuites visibles dans des instruments, mais n'a pas été distribuée et accumulait une petite quantité de mémoire. Idk si c'est ma mise en œuvre ou quoi, mais en ajoutant des removeAllanimations à la fin de l'animation semblait effacer ce minuscule morceau de mémoire résiduelle.
[myview.layer removeAllAnimations];