视图控制器本身并不能管理子视图,是通过它自己所携带的那个View来管理上面的子视图. (本文的内容都写在视图控制器的.m文件中)
视图控制器流程:初始化视图控制器->loadView->viewDidload->viewWillAppear->viewDidAppear->viewWillDisappear->viewDidDisappear
- (void) loadView:当视图控制器对象在使用自身所携带的视图的时候,一旦发现没有那个View,则调用该方法加载.
- (void)viewDidLoad:这个方法经常用来创建UI控件并且添加控件,这个方法是系统的View加载完成的时候系统调用.
- (void)didReceiveMemoryWarning :当视图控制器收到内存警告的时候会被系统调用.在该方法中 我们经常释放一些公共的资源,可再生的资源,或者从来没有用过的资源.一般情况下我们会选择释放自定义视图,因为自定义视图占用的资源比较多.
如何释放自定义视图?
首先判断当前视图控制器的视图有木有创建,并且是否被添加到了窗口上,如果视图被加载,但是并没有展示到窗口上时就将当前视图控制器的视图释放
if ([selfisViewLoaded] &&self.view.window ==nil)//self.view.window == nil表示当前视图是否附着在窗口上,即是否展示给用户.
{
self.view =nil;
}
}
视图控制器可以检测屏幕旋转,随着4英寸,4.7英寸,5.5英寸的上市,classsize九宫格对应用做适配就变得非常必要.
- (void)layoutSubviews在以下情况下被系统调用
1>当前视图调用initWithFrame:进行初始化的时候,当参数的值不是CGRectZero时触发
2>当调用addsubView的时候触发
3>设置当前视图的frame的时候触发,但是修改后的frame跟之前的值不相等
4>旋转屏幕的时候'
5>滚动UIScrollView的时候.
- (void)layoutSubviews
//注意 系统中该方法任何操作都没有做,因此如果想进行重新布局需要重写该方法
{
[superlayoutSubviews];
//获取应用程序状态条的旋转方向
//[UIApplication sharedApplication]//创建应用程序对象
UIInterfaceOrientation orientation = [UIApplicationsharedApplication].statusBarOrientation;//获取当前状态条的旋转状态
switch (orientation) {
caseUIInterfaceOrientationPortrait:
caseUIInterfaceOrientationPortraitUpsideDown:
self.textFiled.frame =CGRectMake(120,50, 180, 40);
self.btn.frame =CGRectMake(100,300, 80, 40);
break;
caseUIInterfaceOrientationLandscapeLeft:
caseUIInterfaceOrientationLandscapeRight:
self.textFiled.frame=CGRectMake(120,50, 180, 40);
self.btn.frame =CGRectMake(100,100, 80, 40);
break;
default:
break;
}
}
设置视图控制器支持的屏幕旋转形式
- (NSUInteger) supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskAll;
}
//该方法当手机屏幕将要从一个方向转向另外一个方向的时候调用,参数是最后的状态.暂停掉音乐或者视频的播放,关闭用户交互
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
NSLog(@"%s %d %ld",__FUNCTION__,__LINE__,toInterfaceOrientation);
}
//该方法当手机屏幕已经从一个方向转向另外一个方向的时候调用,参数是最初的状态.该方法中需要将之前暂停的任务重新打开.
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
NSLog(@"%s %d %ld",__FUNCTION__,__LINE__,fromInterfaceOrientation);
}
//当旋转状态中将要做动画的时候调用(通常需要添加一些自定义的动画)
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
NSLog(@"%s %d %ld",__FUNCTION__,__LINE__,toInterfaceOrientation);
}