簡體   English   中英

推入新視圖時,UINavigationViewController中的根視圖會怎樣?

[英]What happens to the root view in UINavigationViewController when you push on a new view?

具體來說,在推新視圖控制器后,現在應該隱藏的視圖應該怎么做?
在我的情況下,我有一個正在播放動畫的視圖,該視圖在屏幕外顯示后繼續執行。

是否有一些公認的約定? 我是否要從內存中刪除View Controller和View?
Cocoa Touch是否有一種方便的方法來“暫停”視圖(和控制器)並將其從內存中刪除,並在需要時(在彈出窗口之后)使其恢復存在? 我必須自己存檔然后取消存檔嗎?

有什么例子可以指出嗎?

謝謝

另一種可能的解決方案是實現以下兩種方法:

– viewWillAppear:  
– viewDidAppear:  
– viewWillDisappear:  
– viewDidDisappear: 

您可能會在viewWillDisappearviewDidDisappear停止動畫,然后在viewWillAppearviewDidAppear重新啟動動畫。 您還可以在停止動畫之前存儲有關動畫的任何必要狀態信息。

在內存不足的情況下,如果控制器的'view'屬性未顯示在屏幕上,它將自動設置為nil。 然后,視圖將在需要時自動再次加載-並且應在那時調用viewDidLoad。

如果視圖控制器保留頂級視圖的任何子視圖,則您可能要覆蓋視圖控制器的setView:方法,檢查視圖是否設置為nil,如果是,則釋放要保留的子視圖。 否則,頂層視圖可能永遠都不會釋放。

- (void)setView:(UIView *)view
{
    [super setView:view];
    if (view == nil)
    {
        // Release other views
        // self.someView = nil;
    }
}

每當您調用pushViewController時,當前的viewcontroller就會由導航控制器存儲在數組中(可以使用navcontroller的viewControllers屬性對其進行訪問)。

將其視為堆棧。 調用pushViewController時,新的viewcontroller將添加到當前viewcontroller頂部的堆棧中。 但是您的rootviewcontroller仍在內存中。 當您調用popViewController時,該viewcontroller將從堆棧中刪除並釋放。

因此,如果要在視圖消失時停止動畫,請按照Andy的建議使用viewWillDisappear方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM