视图控制器

2016-09-28  本文已影响17人  随风飘荡的小逗逼

#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.

}

上一篇 下一篇

猜你喜欢

热点阅读