我想创建一个下降的硬币。硬币图像是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"];
有帮助吗?

解决方案

是否已经设置旋转动画为NO,e.g的removedOnCompletion属性。,

rota.removedOnCompletion = NO;

这应该离开表示层,其中它是当在动画结束。缺省值是YES,这将快速返回到模型的值,即,您所描述的行为。

在在fillMode也应设置的,即,

rota.fillMode = kCAFillModeForwards;

其他提示

我试图旋转箭头来回,如推特/脸谱“拉刷新”的效果。

的问题是,我被加入后做旋转来回在相同的UIView,所以

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

在前进动画战争工作正常,但向后动画是不工作的。

所以我添加由yeahdixon建议的最后一行,并且另外设置视图的变换,以动画的完成状态下:(通过旋转180度)

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

有关的“恢复”动画(向后)我这样做就完成:

myView.transform = CGAffineTransformMakeRotation(0);

...,它工作正常。不知它不需要removeAllAnimations呼叫。

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

不产生在乐器的可见光泄漏,但没有得到解除分配,并累积的少量内存。 IDK如果我的实现或者什么,但在动画的末尾添加removeAllAnimations似乎清除残留的记忆这么一点点了。

[myview.layer removeAllAnimations];
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top