2011-05-01 37 views
4

剛過我的代碼調用presentModalViewController dismissModalViewControllerAnimated有問題

- (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match 
{ 
    [menuViewController dismissModalViewControllerAnimated:YES]; 
    [GameKitWrapper getSingleton].match = match; 
    match.delegate = [GameKitWrapper getSingleton].remotePlayer; 
    [menuViewController presentModalViewController:avatarSelectionViewController 
             animated:YES]; 
} 

但我有問題,該辭退工作,但不是現在。當我更改dismissModalViewControllerAnimated:YES dismissModalViewControllerAnimated:沒有它工作,但不好看。

任何幫助表示讚賞。

回答

5

@adam有正確的想法,但你不想再等待一段任意延遲。這是脆弱的,因爲它可能需要花費任何時間來完成動畫。你想等待先前的視圖控制器實際完成解散。根據我的經驗,最好的地方在於您當前的視圖控制器的viewDidAppear:。這將在你的模態完全消失後被調用。有關解決類似問題的一些示例代碼,請參見this question

+0

這個答案是正確的。 – adam 2011-05-02 08:04:15

+1

我在這裏有一個替代(http://stackoverflow.com/a/8317603/126855),不需要覆蓋viewDidAppear :. – Bill 2011-11-29 20:56:45

0

嘗試等待第二....

- (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match 
{ 
    [menuViewController dismissModalViewControllerAnimated:YES]; 
    [GameKitWrapper getSingleton].match = match; 
    match.delegate = [GameKitWrapper getSingleton].remotePlayer; 
    [self performSelector:@selector(presentModal) withObject:nil afterDelay:1.0]; 
} 

- (void)presentModal { 
    [menuViewController presentModalViewController:avatarSelectionViewController 
              animated:YES]; 
} 
+1

亞..駁回,並在同一runloop呈現一個UIView控制器可能會導致真正的UI問題,甚至崩潰(至少在以前的我使用的SDK)。而且我經常發現它不能保證簡單地延遲呈現下一個視圖控制器。正因爲如此,我完全避免了這種設計。 – 2011-05-01 14:25:37

+0

等待一段時間是脆弱的。如果時間太長,應用程序將不必要地無響應;如果太短,你現在的通話將失敗。我發現一個解決方案不依賴於計時:http://stackoverflow.com/a/8317603/126855 – Bill 2011-11-29 20:56:08

-1

嘗試調用:

[menuViewController dismissModalViewControllerAnimated:NO]; 

調用之前:

[menuViewController presentModalViewController:avatarSelectionViewController 
        animated:YES]; 
+0

-1提問者已經嘗試過,並且反對缺乏解除視圖控制器的動畫,並且不希望它消失。 – zachjs 2012-10-11 00:05:51

相關問題