2013-09-16 41 views
2

我正在使用視圖控制器遏制在6個視圖控制器之間轉換。轉換使用分段控制進行控制。這一切都可以正常工作,除非分段控件上的按鈕在上一個轉換的動畫完成之前被推送。在這種情況下,應用程序崩潰與如果視圖控制器轉換過快完成,應用程序崩潰

「兒童視圖控制器,並且必須打電話時共同的父視圖控制器 - [UIViewController中transitionFromViewController:toViewController:持續時間:選擇:動畫:完成:]」

代碼爲:

[self transitionFromViewController:currentVC 
        toViewController:newVC 
          duration:1.0 
          options:UIViewAnimationOptionTransitionFlipFromRight 
         animations:nil 
         completion:^(BOOL finished) { 
          [currentVC removeFromParentViewController]; 
          [newVC didMoveToParentViewController:self]; 
          currentVC = newVC; 
         }]; 

我應該禁用分段控制,直到動畫完成?或者他們是避免這個問題的更好方法?

回答

2

您可以禁用和重新啓用應用程序交互調用

[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
[[UIApplication sharedApplication] endIgnoringInteractionEvents]; 

當動畫開始和結束分別。然後,應用程序將忽略所有的交互(觸摸事件),直到動畫完成,因此在安全(動畫完成)之前,該段永遠不會接收事件。

我認爲這種方法也適用於一些內置的容器控制器。不過要注意動畫持續時間。如果動畫需要很長時間,它可能看起來像應用程序沒有反應良好,這會傷害用戶體驗

+0

修復它。謝謝 –

+0

簡單地禁用與分段控制本身的交互('self.segmentedControl.userInteractionEnabled = NO;')是不夠的嗎?這似乎適用於我的用例。 –

+0

@RobertAtkins當然,如果它足夠滿足您的需求。我的回答是防止崩潰的最極端的解決方案,但當然不是理想的解決方案(或者掩飾有問題的代碼);-) –

相關問題