2014-01-12 31 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」。 –