在 iOS 7 之前按百分比动画



UIPercentDrivenInteractiveTransition是iOS 7中可用的转换。是否可以UIPercentDrivenInteractiveTransition之前的iOS 7实现?

例如,在 iOS 6 中使用 CAAnimationUIPanGestureRecognizer 时,是否可以执行相同的动画更新百分比?

更新:我可以按照 panGesture 更新动画的百分比,并在手指抬起后完成整个动画:

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

但是,如果我想取消动画,该怎么办?我的想法是将autoreverses设置为"是",并根据我的预期计算timeOffset。例如,动画持续时间为 1s,总时间为 2s,如果我想在 timeOffset 为 0.5 时重新播放动画,则反向进度时的相同状态为 1.5。这是我的代码,它不起作用:

self.animation.autoreverses = YES;
self.transitionView.layer.timeOffset = 2 - percent; // duration is 1s, percent is current time offset
CFTimeInterval pausedTime = [self.transitionView.layer timeOffset];
self.transitionView.layer.speed = 1.0;
self.transitionView.layer.timeOffset = 0.0;
self.transitionView.layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [self.transitionView.layer convertTime:CACurrentMediaTime() fromLayer:nil] -  pausedTime;
self.transitionView.layer.beginTime = timeSincePause;

查看我写的关于动画计时的内容,然后向下滚动到"控制动画计时"。GitHub 上有一个随附的示例,该示例使用滚动事件从滚动事件手动驱动动画。

您可以将相同的技术(在图层上设置 timeOffset )与手势识别器一起使用来驱动动画。

在我的回答中还有一个更简单的例子,它使用滑块及其动作来控制动画。

最新更新