正在暂停CAKeyframeAnimation

时间:2009-02-11 15:52:41

标签: iphone cocoa core-animation

我在视图的CALayer上使用CAKeyframeAnimation动画UIView的frame属性,并为“position”属性设置动画。我希望能够在用户点击屏幕时暂停当前状态的动画,但我无法这样做。

我可以通过调用

轻松地暂停动画
[view.layer removeAnimationForKey:kFrameAnimationKey];

问题在于,视图的框架和图层的位置都不会直接由动画更新。如果我在动画开始时和在

结束时查看位置属性
- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)finished

它没有改变。

似乎您需要在动画停止时明确地执行此操作。但是如果动画在某个任意点停止,你就不知道它走了多远。所以问题是如何使动画更新图层的位置属性,或者如何知道动画在停止时已经走了多远。

1 个答案:

答案 0 :(得分:22)

您可以通过抓取动画UIView图层的presentationLayer,然后在删除动画之前将其框架应用到UIView来实现动画暂停。例如:

movingView.frame = [[movingView.layer presentationLayer] frame];
[movingView.layer removeAnimationForKey:@"movementAnimation"];

这似乎在你正在寻找的当前动画位置上冻结了UIView。