在使用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];