2012-10-06 23 views
0

我見過的代碼暫停/恢復CALayer的動畫,就像這樣:最好的辦法暫停/恢復的CALayer動畫

[可暫停]

CALayer *layer = object.icon.layer; 
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; 
layer.speed = 0.0; 
layer.timeOffset = pausedTime; 

[恢復]

CALayer *layer = object.icon.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; 

這工作得很好。問題是如果一個新的ViewController被推到ViewController堆棧上,或者應用程序進入背景,然後回到CALayer動畫,立即捕捉到它們的最終位置!

什麼是處理有效暫停/取消暫停UIView動畫的好方法?其中我可以最小化應用程序並將其返回,或更改活動的ViewController而不會丟失動畫!

回答

0

我認爲在暫停時,您需要記住根層的mediaTime,並在應用程序恢復時恢復該值...否則時間會超過您的應用程序暫停時已經過去的時間量。