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

Chr*_*ris 6 iphone core-animation objective-c uiview ios

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

Chr*_*ris 13

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

_view.layer.speed = 0.0;
_view.layer.timeOffset = [_view.layer convertTime:CACurrentMediaTime() fromLayer:nil];
Run Code Online (Sandbox Code Playgroud)

要在比例上设置点,请执行以下操作:

_view.layer.timeOffset = 0..1; (where 1 is the same value as the original duration)
Run Code Online (Sandbox Code Playgroud)

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

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;
Run Code Online (Sandbox Code Playgroud)

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


Rob*_*Rob 2

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

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