视图控制器和屏幕旋转

视图控制器本身并不能管理子视图,是通过它自己所携带的那个View来管理上面的子视图.  (本文的内容都写在视图控制器的.m文件中)

视图控制器流程:初始化视图控制器->loadView->viewDidload->viewWillAppear->viewDidAppear->viewWillDisappear->viewDidDisappear


- (voidloadView:当视图控制器对象在使用自身所携带的视图的时候,一旦发现没有那个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);

}












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值