控制器的生命週期: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。