要停止动画,我所做的是使用参数调用新的 UIView 动画: UIViewAnimationOptionBeginFromCurrentState 以便它覆盖以前的动画。
所以我有一种方法可以将动画从 X 值启动到 Y 值。另一种方法可以中断第一个动画。每当我点击“暂停”按钮时,都会调用第二种方法。
当我想恢复动画时,我会再次调用 start animations 方法,使用对象所在状态的新 X 和 Y 值。
以块格式为我的 UIImageView 对象设置动画的代码:
[UIView animateWithDuration: 5
delay: 0.0
options: UIViewAnimationOptionCurveLinear
animations: ^{
self.center = destinationPosition;
}
completion:nil];
这是停止/中断代码:
UIImageView *currentPosition = [[UIImageView alloc] initWithFrame:[[self.layer presentationLayer] frame]];
destinationPosition.x = currentPosition.center.x;
destinationPosition.y = currentPosition.center.y;
[UIView animateWithDuration: 0.1
delay: 0.0
options: UIViewAnimationOptionCurveLinear | UIViewAnimationOptionBeginFromCurrentState
animations: ^{
self.center = destinationPosition;
} completion:nil];
在这段代码中,我使用图层表示方法来了解对象在动画期间的最后一个值,因此我可以在用户恢复游戏时从该点开始制作动画。这是因为该对象似乎存储了预计的目标值,我不得不用“此刻”值更新它。
请注意,停止动画代码的持续时间仅为 0.1。所以它就像新动画从它被发现的状态(UIViewAnimationOptionBeginFromCurrentState)覆盖了初始动画。该值非常短,因此它恰好将动画“停止”在它所在的位置。
我不知道这是否是最好的方法,但它对我来说很好。