UIViewController/旋转
2015-09-15 17:45
471 查看
//1.创建视图控制器对象 RootViewController *rootVC = [[RootViewController alloc]init]; //2.将试图控制器对象 指定为window的根视图控制器 self.window.rootViewController = rootVC; //3.释放所有权 [rootVC release];
UIViewController中loadView, viewDidLoad, viewWillUnload, viewDidUnload, viewWillAppear, viewDidAppear, viewWillLayoutSubviews,viewDidLayoutSubviews,viewWillDisappear,
viewDidDisappear方法,按照调用顺序说明如下:
1. initWithNibName:bundle:
初始化UIViewController,执行关键数据初始化操作,注意这里不要做view相关操作,view在loadView方法中才初始化,这时loadView还未调用。如果使用StoryBoard进行视图管理,程序不会直接初始化一个UIViewController,StoryBoard会自动初始化或在segue被触发时自动初始化,因此方法initWithNibName:bundle:不会被调用。如果在代码里面使用instantiateViewControllerWithIdentifier:方法显示初始化一个UIViewController,则initWithCoder方法会被调用。如果是通过调用initWithNibName:bundle指定nib文件名初始化的话,ViewController会根据此nib来创建View。如果name参数为nil,则ViewController会通过以下两个步骤找到与其关联的nib:
1)如果ViewController的类名以“Controller”结尾,例如ViewController的类名是MyViewController,则查找是否存在MyView.nib;
2)找跟ViewController类名一样的文件,例如MyViewController,则查找是否存在MyViewController.nib
2.loadView
当访问UIViewController的view属性时,view如果此时是nil,那么VC会自动调用loadView方法来初始化一个UIView并赋值给view属性。此方法用在初始化关键view,需要注意的是,在view初始化之前,不能先调用view的getter方法,否则将导致死循环(除非先调用了[supper loadView];)。
如果没有重载loadView方法,则UIViewController会从nib或StoryBoard中查找默认的loadView,默认的loadView会返回一个空白的UIView对象。
3. viewDidLoad
当VC的view对象载入内存后调用,用于对view进行额外的初始化操作
4. viewWillAppear
在view即将添加到视图层级中(显示给用户)且任意显示动画切换之前调用(这个时候supperView还是nil)。这个方法中完成任何与视图显示相关的任务,例如改变视图方向、状态栏方向、视图显示样式等
5. viewDidAppear
在view被添加到视图层级中,显示动画切换之后调用(这时view已经添加到supperView中)。在这个方法中执行视图显示相关附件任务,如果重载了这个方法,必须在方法中调用[supper viewDidAppear];
6. viewWillLayoutSubviews
view即将布局其Subviews。比如view的bounds改变了(例如状态栏从不显示到显示,视图方向变化),要调整Subviews的位置,在调整之前要做的一些工作就可以在该方法中实现。
7. viewDidLayoutSubviews
view已经布局其Subviews。比如view的bounds改变了(例如状态栏从不显示到显示,视图方向变化),已经调整Subviews的位置,在调整完成之后要做的一些工作就可以在该方法中实现。
8. viewWillDisappear
view即将从superView中移除且移除动画切换之前,此时还没有调用removeFromSuperview。
9. viewDidDisappear
view从superView中移除,移除动画切换之后调用,此时已调用removeFromSuperview。
10. viewWillUnload
在VC的view对象从内存中释放之前调用,可以在view被释放前做一些资源清理操作。在iOS6.0开始就废弃了,该方法不再会调用
11. viewDidUnload
在VC的view对象从内存中释放之后调用,可以在view被释放后做一些view相关的引用清理操作,此时view为nil。在iOS6.0开始就废弃了,该方法不再会调用//初始化方法 指定初始化方法:调用任何初始化方法 都会执行该方法 -(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // } return self; }
//当视图控制器需要view的时候 该方法调用 创建view并给self.view赋值 //当我们需要自定义试图控制器的view 我们需要重写loadView方法 进行自定义视图的创建 并给self.view赋值(注意!!!!此时不能调用[super loadView]); -(void)loadView { //[super loadView]; //创建登陆视图 LoginView *loginView = [[LoginView alloc]initWithFrame:CGRectMake(0, 0, 375, 667)]; //将登陆视图 指定为当前视图控制器的view self.view = loginView; }
#pragma mark - 旋转 //设置 当前试图控制器 是否支持旋转 -(BOOL)shouldAutorotate { return YES; } //设置当前视图控制器 支持旋转方向 -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } #pragma mark - 被弃用的旋转 方法 //屏幕将要旋转时 触发 之前一般用来视频,音频的暂停操作 -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { NSLog(@"屏幕将要旋转"); } //旋转动画将要开始 触发 之前一般进行过度动画的控制 -(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { NSLog(@"将要开始旋转动画"); } //旋转结束时 触发 之前一般进行暂停视频.音频的重新播放 -(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { NSLog(@"结束旋转"); }
相关文章推荐
- uva1252 Twenty Questions 状压dp
- 数据库中使用自增量字段与Guid字段作主键的性能对比
- Uitableview中didSelectRowAtIndexPath常用的获取cell信息的方法
- iOS 增加UIButton按钮的可点击区域
- GUID和INT两种数据类型做主键的比较
- java.sql.Date.valueOf(String s)
- easyui combo下拉框多选框
- 部署mondrian+Jpviot遇见的问题,jsp用标签<jp:xmlaQuery>做xmla访问查询报错如下,正文详细内容
- Unknown class ViewController in Interface Builder file
- Android UI--自定义ListView(实现下拉刷新+加载更多)
- 【vim】分割窗口、标签页与Quickfix窗口
- 高仿支付宝解锁UI
- iOS开发之 滚动视图 + 页面控件(UIScrollView + UIPageControl)
- mysql 异步执行 query //@todo
- Android使用ValueAnimator实现双击事件的判断
- easyui 日期控件格式化
- iOS 开发之 菜单栏UITabBarController
- C# window Service实现调用有UI的应用程序(关于win xp以后的window系统)
- android post和get请求 && 子线程获取UI线程的值
- java中String和StringBuider,StringBuffer的区别