UI04 ViewController


一、视图控制器 
二、视图控制器指定⾃自定义 View
三、屏幕旋转
四、处理内存警告

MVC概述

UIViewController MVC 设计模式的核⼼心。
MVC 是⼀一个框架级的设计模式。
M Model ,主要⽤用于建⽴立数据模型(即数据的结构) 
V View ,我们能看到的所有控件都是 view , view 主要的功能是展⽰示数据。
C 是控制器,主要是控制 M V 的通信。 


ViewController 1. 控制视图显示(根视图 view  2. 处理响应事件( UIbutton 的)
 3. 监测设备旋转方向  4. 接收系统发出的内存警告
  执行顺序  1. 创建 controller 对象         (系统指定初始化方法)  2. 创建 controller view     (可以设置自定义 view  3. 加载 controller view    (布局子视图)



1.创建 controller 对象          (系统指定初始化方法)
//controller 的指定初始化方法。 - ( id )initWithNibName:( NSString *)nibNameOrNil bundle:( NSBundle *)nibBundleOrNil {    self = [ super initWithNibName :nibNameOrNil bundle :nibBundleOrNil];    if ( self ) {        // Custom initialization         NSLog ( @"%s,%d" , __FUNCTION__ ,__LINE__);        // 不要再 controller 的初始化中操作根视图 view         // 不要使用 self.view (还没有根视图)     }    return self ; }

// 创建 viewController 对象时, viewContriller 会默认创建一个 UIView 对象。 // 该方法执行时, viewContronller 控制的 view 已经创建并加载到 window // 当根视图 view 将要显示在 window 上时,才会执行 ( 减少内存 ) // 视图已经加载, - ( void )viewDidLoad;


// window 上显示登陆页面      // 不直接在 window 上添加子视图      // 先创建一个管理页面的 UIViewController UIViewController 设置给 window 作为根视图控制器      // 先创建视图控制器      LoginViewController  * loginVC = [[ LoginViewController   alloc init ];     // 设置 window      self . window . rootViewController  = loginVC; //    [self.window addSubview:loginVC.view]; 方法相同     [loginVC  release ];


2. 创建 controller view      (可以设置自定义 view
// 重写继承得到的 loadView 方法 // 创建并指定 controller 的根视图 view // 如果不重写,即 contronller 默认创建一个 UIView 类型的根视图对象 // 如果重写,即我们需要在 controller 当中,自己创建并指定一个根视图对象,可以是自定义视图类型,例如: LoginView - ( void )loadView {    self . view = [[[ UIView alloc ] initWithFrame :[[ UIScreen mainScreen ] bounds ]] autorelease ];    NSLog ( @"%s,%d" , __FUNCTION__ ,__LINE__); }
3. 加载 controller view     (布局子视图)



使用视图控制器
定义 UIViewController 的⼦子类 
创建视图控制器对象,作为 window 的根视图控制器 
viewDidLoad 中使⽤用默认创建好的视图对象 view 

如何设置

⾃自定义视图类继承 UIView 。在初始化⽅方法中添加⼦子视图控件。

重写 controller loadView ⽅方法。创建⾃自定义视图对象,并指定为 controller view
将⼦子视图控件对象设置为⾃自定义视图类的属性,在 viewDidLoad ⽅方法中进 ⾏行设置:添加 action 、设置 delegate 等等。

controller 中添加按钮点击事件实现和代理⽅方法的实现。 
视图控制器本⾝身能检测到屏幕的旋转,如果要处理屏幕旋转,需要重写⼏几个
⽅方法:
1. supportedInterfaceOrientations (设置设备⽀支持旋转的⽅方向)
2. willRotateToInterfaceOrientation:duration: (暂停⾳音乐、关闭视图交互等)
3. willAnimateRotationToInterfaceOrientation:duration: (添加⾃自定义动画 等)

4. didRotateFromInterfaceOrientation :(播放⾳音乐、打开视图交互等)。 

宏定义
#define UIInterfaceOrientationIsPortrait(orientation)  ((orientation) == UIInterfaceOrientationPortrait || (orientation) == UIInterfaceOrientationPortraitUpsideDown) #define UIInterfaceOrientationIsLandscape(orientation) ((orientation) == UIInterfaceOrientationLandscapeLeft || (orientation) == UIInterfaceOrientationLandscapeRight)


视图处理
注意视图控制器会⾃自动调整 view 的⼤大⼩小以适应屏幕旋转, bounds
被修改,触发 view layoutSubviews ⽅方法。
view 重写 layoutSubviews ⽅方法,根据设备⽅方向,重新布局。

[UIApplication shareApplication].statusBarOrientation 提供设备 当前⽅方向。 

处理内存警告

控制器能监测内存警告,以便我们避免内存不够引起的 crash
在定义的 controller ⼦子类中重写 didReceiveMemoryWarning ⽅方法。 
释放暂时不使⽤用的资源。 ( 数据对象、图像

// 内存警告 - ( void )didReceiveMemoryWarning {    [ super didReceiveMemoryWarning ];    // Dispose of any resources that can be recreated.       NSLog ( @"%s,%d" , __FUNCTION__ ,__LINE__);       // self.view = nil;// 直接释放内存会释放掉用户正在使用的视图         if ([ self isViewLoaded ] == YES && self . view . window == nil ) {        //controller 创建并加载过的根视图,并且 controller 的根视图没有在 window 显示,         // 销毁不需要使用的数据对象和视图         self . view = nil ;    } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值