#pragma mark =============视图生命周期=====================
一、 视图控制器生命周期
1、加载视图
-(void)loadView{
创建视图控制器的时候,系统会默认在这里方法中给我们创建一个空白的View.
如果想使用自己指定的代替默认的那个空白View,就需要重写这个方法。用我们自己指定的视图给self.view赋值。例如:(self.view = myView)
}
2、加载完成后调用的方法
-(void)viewDidLoad{
在这里指定视图加载完成后显示的内容。
}
3、视图即将出现的方法
-(void)viewWillAppear:(Bool)animated{
}
4、视图已经出现
-(void)viewDidAppear:(Bool)animated{
}
5、视图即将消失触发的方法
-(void)viewWillDisappear:(BOOL)animated{
}
6、视图已经消失触发的方法
-(void)viewDidDisappear:(BOOL)animated{
}
#pragma mark =============屏幕旋转================
首先:屏幕旋转会激发当前视图控制器的下面这个方法
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator{
在这里可以调用coordinator的方法来改变旋转的时候指定视图的变换动画,例如下面这个方法:
- (BOOL)animateAlongsideTransition:(void(^__nullable)(idcontext))animation//指定旋转时候要做的事情
completion:(void(^__nullable)(idcontext))completion;//指定旋转结束后要做的事情。
}
其次:因为屏幕旋转会修改子视图的Bounds,所以需要用特定的方法来修改子视图的Frame.
1、旋转屏幕会改变View的Bounds,需要重写LayoutView方法,以此来重新布局。
但是这个方法一般不会重写,只有在一下情况下才会需要重写。
layoutSubviews在以下情况下会被调用:
1、init初始化不会触发layoutSubviews
但是是用initWithFrame 进行初始化时,当rect的值不为CGRectZero时,也会触发
2、ddSubview会触发layoutSubviews
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
4、滚动一个UIScrollView会触发layoutSubviews
5、旋转Screen会触发父UIView上的layoutSubviews事件
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件
-(void)LayoutView{
//第一步:判断获取设备的当前方向
//第二步:通过屏幕状态栏的方向进行判断,获取屏幕状态栏方向的方法是:[UiApplication shapedapplication].statusBarOrientation
statusBarOrientation是个枚举类型的属性,通过枚举值可以判断设备的方法。
//第三步:改变子视图的Frame.
}