2012-10-22 27 views
4

我創建了一個GLKViewController這樣的:如何創建一個以暫停狀態啓動的GLKViewController?

// Create a GLK View Controller to handle animation timings 
_glkVC = [[GLKViewController alloc] initWithNibName:nil bundle:nil]; 
_glkVC.preferredFramesPerSecond = 60; 
_glkVC.view = self.glkView; 
_glkVC.delegate = self; 
_glkVC.paused = YES; 
NSLog(@"initial state: %@", _glkVC.paused ? @"paused" : @"running"); 

,但它會立即開始調用委託更新方法,並從上面的NSLog輸出:initial state: running

我管理與setNeedsDisplay,但我希望我的視圖更新GLKViewController不時處理動畫,所以我只想在需要時取消暫停動畫。有沒有辦法在暫停狀態下啓動控制器?

+0

我想再次打開此問題。 FPS的解決方法是好的,但肯定有更好的方法? –

回答

1

代替任何答案,我使用這個變通辦法:

我設置開始,然後在更新方法我檢查if(preferredFramesPerSecond == 1)並設置.paused = YES(並設置我真正需要的價值preferredFramesPerSecond)。然後,我可以允許其他更新方法在初始化後運行一次,或者如果我不想運行它,則立即返回。

然後我根據需要用setNeedsDisplay手動觸發重繪,並在需要動畫時取消暫停。

如果有人有更好的解決方案,請照常回答。

2

你試過在viewDidAppear方法而不是viewDidLoad方法中暫停嗎?它應該看起來像這樣:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated];  
    // self.paused automatically set to NO in super's implementation 
    self.paused = YES; 
} 

繁榮,完成!如果這樣做,那麼你可以每分鐘保存一次「if」檢查,以便暫停發射!

+0

這不起作用。在'viewDidAppear'命中之前,繪製方法會被觸發幾次。 –

1

您是否試過重覆resumeOnDidBecomeActive返回?這應該保持動畫在任何激活時暫停,包括第一個。

2

viewDidAppear方法適用於我,但不是最佳方式。在暫停生效之前會出現幾幀可見動畫。使用viewWillAppear效果更好:

- (void) viewWillAppear: (BOOL) animated 
{ 
    [ super viewDidAppear: animated ]; 
    self.paused = YES; 
}