2014-01-12 28 views
1

UIPercentDrivenInteractiveTransition是iOS 7中可用的转换。是否有可能在iOS 7之前实现UIPercentDrivenInteractiveTransitioniOS 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。例如,动画持续时间为1秒,总时间为2秒,如果我想在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; 

回答

1

检查什么I wrote about animation timing,向下滚动到“控制动画计时”。有一个accompanying example on GitHub使用滚动事件来手动驱动滚动事件中的动画。

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

还有一个简单得多的示例in my answer here,它使用滑块及其动作来控制动画。

+0

是的,我正在考虑timeOffset是关键点,我会检查你的例子。非常感谢! – codiction

+0

我更新了我的问题,你有任何想法如何取消动画? – codiction

+0

@codiction您可以随时删除动画,并将当前表示层值的另一个动画添加回原始值。您不必与此动画交互,因此请记住在取消手动动画和添加回归动画之间将图层的速度设置回“1.0”。 –