我想设置一个UIView动画,但不是花了一段时间,我想控制百分比进度并让它自动为我插值。那可能吗?感谢
答案 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)手势完成后,您只需根据自己的逻辑拨打cancelInteractiveTransition
或finishInteractiveTransition
。