3

我注意到iOS 5引入了額外的參數和方法來檢測視圖控制器的演示動畫何時完成。presentModalViewController檢測動畫完成

有沒有辦法在較早的版本,如iOS 4.x做到這一點?

我已經使用presentModalViewController來呈現控制器,我注意到你不能調用dismiss方法,除非動畫已經完成。

那麼我該如何檢測動畫何時完成,然後才能解除它?

+1

出於好奇,價值是什麼樣的呈現,然後立即駁回模態視圖控制器? – CodaFi 2012-03-18 05:10:21

+0

噢...我提出了一個請稍候屏幕,並執行一些可能需要一分鐘左右的網絡請求。如果連接出現錯誤,有時會在動畫完成之前檢測到它。如果我解僱它,那麼它似乎忽略了這個命令。 – blissweb 2012-03-18 15:09:55

+0

如果您只想向他們展示您在長時間運行的流程完成時正在做些什麼,例如從Web上獲取一些數據,請嘗試使用['SVprogressHUD'](https://github.com/samvermette/SVProgressHUD) 。它將禁用界面並顯示一個'UIActivityIndi​​cator'。 – 2012-03-18 22:19:56

回答

1

我只是試圖解僱一個模態提出的VC,在viewDidLoad,viewWillAppear和viewDidAppear。前兩名沒有骰子,但解僱工作在視圖中出現。 (在動畫完成後會調用這種方法是有道理的)。

而且,您可能已經知道這一點,但如果您不這樣做:您不必從提交它的VC中解除模態提供的VC。您的「等待網絡」VC可以檢查viewDidAppear中的連接狀態,並在連接完成時關閉自身。

+0

太棒了...謝謝你。希望它能幫助更多的人。我會盡量在稍後用我的編碼解決方案更新這篇文章。 – blissweb 2012-03-19 12:47:01

0

沒有確切的方法可以做到這一點 - 您可以期待的最好方法是使用呈現視圖控制器中的viewDidDisappear:。請確保使用布爾實例變量來確定您是否正在消失,因爲模態視圖控制器正在呈現或其他原因。老實說,如果你正在構建新的軟件,我堅決鼓勵你將iOS 5和更高版本作爲目標。絕大多數人已經升級,其餘的將在幾個月內;沒有理由爲新項目支持iOS 4。

+0

謝謝。我會試一試。我想我也可以在模態加載後發回消息。任何想法「viewWillAppear」和「viewDidLoad」塊或哪些其他只會在動畫完成後觸發*的內容? – blissweb 2012-03-19 03:47:22

+0

這是一個非常好的問題 - 蘋果關於[View Controller Life Cycle]的文檔(https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ViewLoadingandUnloading/ViewLoadingandUnloading.html#//apple_ref/doc/uid/TP40007457-CH10-SW1)非常全面。我建議閱讀表4-1以瞭解放入哪種方法的邏輯。如果您使用xib而不是故事板,那很好,本指南仍然適用。 – 2012-03-19 12:38:32

0

它只是說「等,而我做網絡請求」?也許你可以使用一個視圖(全尺寸連接到keyWindow)而不是整個視圖控制器。啓動網絡請求的vc可以呈現視圖並將其與任何您喜歡的動畫一起移除。我有一個班級可以做到這一點。讓我知道如果你想嘗試,我會粘貼它。

+0

我應該提到,它是OS5代碼,所以你必須添加手動垃圾收集。 – danh 2012-03-18 22:32:55

+0

是的,我同意這是一個好的解決方法,只是更多的工作和代碼,只是想知道是否有答案的具體問題,我的和其他人受益。謝謝。 – blissweb 2012-03-19 03:50:08