在使用CABasicAnimation旋转CALayer之后,图层跳回到未旋转的位置

我正在试图创造一个下降的硬币。 硬币图像是CALayer上有2个CABasicAnimations – 一个倒下和一个旋转。 当倒下的animation结束时,它停留在那里。 虽然旋转animation应该是随机的,每次都会以不同的angular度结束,但是会popup原来的CALAyer图像。

我希望它保持在完成animation的angular度。 可能吗? 我该怎么做?

码:

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

您是否将旋转animation的removedOnCompletion属性设置为NO,例如,

 rota.removedOnCompletion = NO; 

这应该使表示层在animation完成时留在原来的位置。 默认值是YES,它将回溯到模型值,即您描述的行为。

fillMode也应该被设置,即,

 rota.fillMode = kCAFillModeForwards; 

我试图来回转动一个箭头,就像Twitter / Facebook的“拉到刷新”效果。

问题是,我在同一个UIView上来回旋转,所以添加后

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

前进的animation战争工作正常,但向后的animation根本不工作。

所以我添加了yeahdixonbuild议的最后一行,并将视图的转换设置为animation的完成状态:(旋转180度)

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

对于“恢复”animation(倒退),我会在完成后执行此操作:

 myView.transform = CGAffineTransformMakeRotation(0); 

…它工作正常。 不知何故,它不需要removeAllAnimations调用。

我发现通过设置: removedOnCompletion = NO;

在乐器中没有产生可见的泄漏,但没有被释放,并积累了less量的记忆。 IDK,如果我的实现或什么,但通过在animation结束时添加removeAllAnimations似乎清除了这个微小的剩余内存。

 [myview.layer removeAllAnimations];