手动控制UIView动画的进度,而不是在持续时间内自动控制

时间:2014-03-26 05:05:56

标签: ios iphone objective-c uiview core-animation

我想设置一个UIView动画,但不是花了一段时间,我想控制百分比进度并让它自动为我插值。那可能吗?感谢

2 个答案:

答案 0 :(得分:13)

我想我已经明白了。在[UIView animate ...]块之后,立即在根视图上执行以下操作:

_view.layer.speed = 0.0;
_view.layer.timeOffset = [_view.layer convertTime:CACurrentMediaTime() fromLayer:nil];

要在比例上设置点,请执行:

_view.layer.timeOffset = 0..1; (where 1 is the same value as the original duration)

要恢复,类似于以下内容:

CALayer *layer = _view.layer;
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime = timeSincePause;

这一切都来自这里:https://developer.apple.com/library/ios/qa/qa1673/_index.html

答案 1 :(得分:1)

如果您正在谈论链接到某个手势识别器的简单UIView动画,您通常不会在手势期间使用动画,而只是在接收更新时更新视图的属性作为连续手势(例如UIPanGestureRecognizer)进展,然后仅在您放手时应用传统动画并希望完成用户手动启动的动画。您不需要在连续手势期间使用动画,因为这些事件足够快以在手势期间呈现视图属性的平滑变化。当用户放手时你只需要传统的动画,你想要顺利地继续动画到它的逻辑结论。

或者,如果你正在谈论新的iOS 7视图控制器转换(一个稍微复杂,非常专业的场景),你(a)设置一个动画对象(一个符合UIViewControllerAnimatedTransitioning); (b)设置一个交互控制器(在其上符合UIViewControllerInteractiveTransitioning,例如UIPercentDrivenInteractiveTransition); (c)您的手势将更新交互控制器的percentComplete; (d)手势完成后,您只需根据自己的逻辑拨打cancelInteractiveTransitionfinishInteractiveTransition