控制器的生命週期

控制器的生命週期:loadView—>viewDidLoad—>willSublayout—>didSublayout—>viewWillAppear—>viewDidAppear—>viewWillDisappear—>viewDidDisappear app

 

1.loadView:    是蘋果專門爲手寫代碼準備的,一旦實現了該方法  xib / sb 自動失效;準備視圖層次結構的根視圖;在視圖沒有被實例化以前,不用追蹤view 不然會形成遞歸調用。 佈局

2. viewWillAppear動畫

1)集成百度地圖的時候,在viewWillAppear方法中,具體方法能夠打印。遞歸

BMKMapView新增viewWillAppear、viewWillDisappear方法來控制BMKMapView的生命週期,並設置delegate,代碼以下:生命週期

(void)viewWillAppear:(BOOL)animated    內存

{    rem

    [_mapView viewWillAppear];    it

    _mapView.delegate = self; // 此處記得不用的時候須要置nil,不然影響內存的釋放    io

}    百度地圖

-(void)viewWillDisappear:(BOOL)animated    

{    

    [_mapView viewWillDisappear];    

      _mapView.delegate = nil; // 不用時,置nil    

 

2)有的時候,咱們的視圖使用了Navigation Controller ,可是主界面(rootviewcontroller)或其它push進入的界面 想使用一個全屏的view,就是說,不顯示頂部的navigationBar,這個時候,就須要咱們來隱藏了。 

 

//隱藏NavigationBar 

-(void) viewWillAppear:(BOOL)animated{ 

     

    [self.navigationController setNavigationBarHidden:YES animated:YES]; //設置隱藏 

    [super viewWillAppear:animated]; 

 

-(void) viewWillDisappear:(BOOL)animated{ 

 

    [self.navigationController setNavigationBarHidden:NO animated:YES]; 

    [super viewWillDisappear:animated]; 

         

 

3)添加通知的時候,這個代碼建議寫到viewWillAppear

-(void)viewWillAppear: 

   移除通知的時候,建議寫在viewWillDisappear中

 

4) 若是要刪除系統自帶TabBar裏面的控制時能夠用下面的方法

- (void)viewWillAppear:(BOOL)animated

{

      [super viewWillAppear:animated];

     XZLog(@"刪除以前%@", self.tabBar.subviews);

    // 遍歷tabBar中全部的子控件,刪除不須要控件

    // UITabBarButton 這個類是私有API

    for (UIView *subView in self.tabBar.subviews) {

        if ([subView isKindOfClass:[UIControl class]]) {

            [subView removeFromSuperview];

        }

    }

    XZLog(@"刪除以後%@", self.tabBar.subviews);

 

 

 

3.動畫效果的執行  須要在viewDidAppear生命週期方法中執行

 

viewDidAppear

//界面已經出現的時候會自動調用, 在這個方法中全部的子視圖的位置已經設置完畢。

 

 

 

4.layoutSubviews是UIViiew自帶的方法.

 

// 控件的frame發生改變的時候就會調用,通常在這裏重寫佈局子控件的位置和尺寸

// 重寫了這個寫方法後,必定調用[super layoutSubviews];

 

layoutSubviews方法(什麼時候調用)

 

1)調整子控件的frame,還有它的當前這個方法所在類的控件frame發生變化以後也會來調用,

2)只有當前控件的frame中的「尺寸size」發生變化纔會來調用此方法,若是隻是當前類的x,y發生變化了,是不會調用layoutSubviews方法的。由於子控件的x,y是參照當前類的x,y,類的x,y發生變化直接子控件的x,y也會隨之變化,

3)屏蔽旋轉時也會調用此方法.

4)init初始化時不會調用此方法。

5)addSubview會觸發layoutSubviews。

相關文章
相關標籤/搜索