2013-04-25 67 views
1

我正在創建一個遊戲,我必須不斷地從上到下移動coveyner帶。問題出現在我的應用程序進入後臺並稍後恢復時。如何在iOS中創建連續動畫,並在後臺應用程序中運行?

該對象從當前位置移除,動畫停止。

+0

什麼(如果有的話在所有)你試過恢復動畫? – 2013-04-25 06:47:24

+1

否動畫不會在後臺播放。當應用程序進入後臺時,必須保存對象的狀態,然後在應用程序進入前臺時恢復對象的狀態。 – 2013-04-25 07:05:08

+0

沒有看到代碼是不可能的,但是,我懷疑發生了什麼是視圖被卸載,並且你的視圖控制器沒有正確地重新加載它 - 特別是它需要重新加載傳送帶和它的動畫。行爲也依賴於操作系統請參閱此處的「內存管理」:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html – 2013-04-25 07:08:44

回答

0

正如評論所描述的那樣,你基本上不能這樣做,至少不是以兩岸向前的方式。 讓我告訴你我將如何處理以下問題:

您遇到的主要問題是,當對象被動畫時,對象的實際位置並不真正改變。表達層改變了什麼! 那麼,你怎麼知道物體在哪裏?那麼,理論上你可以通過詢問層表示層的實際框架,anchorpoint,或任何財產是,你是動畫這樣做:

[[myView.layer presentationLayer] frame]; 

所以,當應用程序投入什麼,我會做的是背景我會設置更新所有視圖以反映表示層。當你回來時,我會從那裏恢復動畫。物體應該放在正確的地方。

NSAarray *viewsBeingAnimated; 

- (void)applicationWillEnterForeground:(UIApplication *)application{ 
for (UIView *oneView in viewBeingAnimated){ 
    // Update whatever other properties that you were animating 
    [oneView setFrame:[[myView.layer presentationLayer] frame]]; 

    [oneView layer] removeAllAnimations]; 
    } 
} 

現在,一旦應用程序恢復,您應該能夠從那裏繼續。

希望有所幫助。

0
-(void)pauseLayer:(CALayer*)layer{ 
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; 
layer.speed = 0.0; 
layer.timeOffset = pausedTime;} 

#pragma mark -resume game 

-(void)resumeLayer:(CALayer*)layer{ 
NSLog(@"paused:%f",[layer timeOffset]); 
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;} 

我使用此代碼,我使用基於塊的動畫以動畫的時間數以千計的圖像之一落下從頂部到iPhone屏幕下方

相關問題