【发布时间】:2014-05-04 07:42:28
【问题描述】:
我想设置一个 UIView 动画,但不是花费给定的时间,我想控制百分比进度并让它自动为我插入值。那可能吗?谢谢
【问题讨论】:
-
对于动画你最终需要定义时间,那就是
animation time
标签: ios iphone objective-c uiview core-animation
我想设置一个 UIView 动画,但不是花费给定的时间,我想控制百分比进度并让它自动为我插入值。那可能吗?谢谢
【问题讨论】:
animation time
标签: ios iphone objective-c uiview core-animation
如果您谈论的是与某个手势识别器相关联的简单 UIView 动画,您通常不会在手势期间使用动画,而是在收到更新为连续手势时更新视图的属性(例如 @987654322 @) 进行,然后仅在您放手并希望完成用户手动启动的动画时才应用传统动画。您不需要在连续手势期间使用动画,因为这些事件来得足够快,可以在手势期间呈现视图属性的平滑变化。当用户放手并且您希望动画顺利地继续到其合乎逻辑的结论时,您只需要传统动画。
或者,如果您谈论的是新的 iOS 7 视图控制器转换(一个稍微复杂、非常专业的场景),您 (a) 设置一个动画对象(符合 UIViewControllerAnimatedTransitioning 的对象); (b) 设置一个交互控制器(符合UIViewControllerInteractiveTransitioning,例如UIPercentDrivenInteractiveTransition); (c) 你的手势会更新交互控制器的percentComplete; (d) 手势完成后,您只需根据自己的逻辑调用cancelInteractiveTransition 或finishInteractiveTransition。
【讨论】:
UIPageViewController 是一种以 iOS 6 兼容方式在视图控制器之间滑动的简单方法(尽管在动画方面受到限制)。这仅取决于您要拍摄哪种动画。
我想我明白了。在 [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
【讨论】: