我正在努力创造一枚落硬币。硬币图像是一个带有2个CABasicAnimations的CALayer - 一个掉落和一个旋转。当落下的动画结束时,它就会停留在那里。旋转动画虽然应该是随机的,但每次都以不同的角度结束,只会弹回原始的CALAyer图像。
我希望它保持在完成动画的角度。可能吗?我该怎么做?
代码:
//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"];
答案 0 :(得分:79)
您是否已将旋转动画的removedOnCompletion属性设置为NO,例如
rota.removedOnCompletion = NO;
这应该使表示层离开动画结束时的位置。默认值为YES,它将回溯到模型值,即您描述的行为。
还应设置fillMode,即
rota.fillMode = kCAFillModeForwards;
答案 1 :(得分:4)
我试图来回转动箭头,就像Twitter / Facebook“拉动刷新”效果一样。
问题是,我在同一个UIView上来回旋转,所以在添加
之后rotation.removedOnCompletion = NO;
rotation.fillMode = kCAFillModeForwards;
前进动画战争工作正常,但后退动画根本无法正常工作。
所以我添加了yeahdixon建议的最后一行,另外将视图的变换设置为动画的完成状态:(旋转180度)
[myview.layer removeAllAnimations];
myView.transform = CGAffineTransformMakeRotation(M_PI);
对于'恢复'动画(向后),我在完成时执行此操作:
myView.transform = CGAffineTransformMakeRotation(0);
......它运作正常。不知何故,它不需要removeAllAnimations调用。
答案 2 :(得分:1)
我通过设置:removedOnCompletion = NO;
没有在仪器中产生可见的泄漏,但没有被解除分配,并且积累了少量的内存。 IDK,如果它是我的实现或什么,但通过在动画结束时添加removeAllAnimations似乎清除了这一点残余内存。
[myview.layer removeAllAnimations];