![](/img/trans.png)
[英]Force portrait orientation on pushing new view to 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:
您可能會在viewWillDisappear
或viewDidDisappear
停止動畫,然后在viewWillAppear
或viewDidAppear
重新啟動動畫。 您還可以在停止動畫之前存儲有關動畫的任何必要狀態信息。
在內存不足的情況下,如果控制器的'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.