iphone calayer cabasicanimation

iphone - Después de rotar un CALayer usando CABasicAnimation, la capa salta a su posición no girada



(3)

Estoy tratando de crear una moneda que cae. La imagen de la moneda es un CALayer con 2 CABasicAnimations en ella: una caída y una rotación. Cuando la animación de caída llega a su fin, permanece allí. Sin embargo, la animación de rotación, que se supone que es aleatoria y termina en un ángulo diferente cada vez, simplemente regresa a la imagen original de CALAyer.

Quiero que permanezca en el ángulo en que terminó la animación. ¿Es posible? ¿Cómo lo hago?

Código:

//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"];


¿Ha establecido la propiedad removedOnCompletion de la animación de rotación en NO, por ejemplo,

rota.removedOnCompletion = NO;

Eso debería dejar la capa de presentación donde estaba cuando finalizó la animación. El valor predeterminado es SÍ, que retrocederá al valor del modelo, es decir, el comportamiento que describe.

El modo de llenado también debe establecerse, es decir,

rota.fillMode = kCAFillModeForwards;


Intenté rotar una flecha hacia atrás y hacia adelante, como el efecto "Pull to Refresh" de Twitter / Facebook.

El problema es que estaba haciendo la rotación de ida y vuelta en el mismo UIView, así que después de agregar

rotation.removedOnCompletion = NO; rotation.fillMode = kCAFillModeForwards;

La guerra de animación hacia adelante funcionaba bien pero la animación hacia atrás no funcionaba en absoluto.

Así que agregué la última línea sugerida por yeahdixon, y además establecí la transformación de la vista en el estado completo de la animación: (rotación de 180 grados)

[myview.layer removeAllAnimations]; myView.transform = CGAffineTransformMakeRotation(M_PI);

Para la animación ''restaurar'' (hacia atrás) hago esto al finalizar:

myView.transform = CGAffineTransformMakeRotation(0);

... y funciona bien De alguna manera, no necesita la llamada removeAllAnimations.


Lo encontré estableciendo: removedOnCompletion = NO;

no produjo una fuga visible en los instrumentos, pero no se desasignó y estaba acumulando una pequeña cantidad de memoria. IDK si es mi implementación o qué, pero al agregar removeAllAnimations al final de la animación pareció despejar este pequeño bit de memoria residual.

[myview.layer removeAllAnimations];