视图控制器 ( UIViewController )

 UIViewController 介绍

     ◊ 视图控制器就像一个大管家, 用来管理视图加载, 卸载, 横屏竖屏显示等操作

     ◊ 每一个界面都应该由一个控制器来管理

     ◊ UIViewController是所有视图控制器的父类

     ◊ IOS 提供了许多内置的视图控制器类, 以支持标准的用户界面部分, 比

          √ 如导航控制器 ( UINavigationController )

          √ 标签栏控制器 ( UITabBarController )

          √ 表视图控制器 ( UITabViewController )


 视图控制器与视图关系

     ◊ 视图控制器是传统的Model-View-Controller ( MVC ) 设计模式中 ---- 控制器

     ◊ 视图控制器提供了许多控制器的基本功能, 因为它是所有控制器的基类

     ◊ 视图控制器负责创建和管理一组视图, 它本身就提供了一个视图, 称为该控制器的跟视图, 协调管理数据和视图之间的交互


 视图控制器管理视图

     ◊ 每个视图控制器管理和控制一系列的视图

     ◊ 不要直接把UIView添加到UIWindow上面, 而是添加一个UIViewController.


 UIViewController 的创建

     ◊ 代码创建视图

     ◊ 使用xib 的方式创建视图


     ∆ 代码方式创建:

          // 创建每个控制器的根视图

          UIView *rootView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];

          self.view = rootView;

          self.view.backgroundColor = [UIColor redColor];

          [rootView release];


     ∆ 使用 xib 的方式创建

          RootViewController *rootCtrl = [[RootViewController alloc] initWithNibName:@"RootViewControllerBak" bundle:nil];

          self.window.RootViewController = rootCtrl;

          [rootCtrl release];

     注意事项:

       视图控制器的xib文件,是在UIViewControllerloadView中加载此xib文件的

       如果此控制器的视图由xib创建的,则不要覆写loadView方法,这样会导致xib无法加载



 视图的加载  




     ◊ 视图控制器 loadView 方法 的调用时机

          √ 调用了 view 的访问器

          √ 视图控制器的 view 为空

    RootViewController *rootCtrl = [[RootViewControlleralloc] init];

    

    //调用了view的访问器,并且viewnil,此时会调用loadView方法

    UIView *view = rootCtrl.view;


     ◊ 覆盖 父类中的loadView 方法

     - (void)loadView {

    //loadView不要调用父类的loadView

    //    [super loadView];

    

    UIView *view = [[UIViewalloc] initWithFrame:CGRectMake(0, 20, 320, 480-20)];

    self.view = view;

    [view release];

    }




 设置支持方向旋转

     修改 info.plist 文件如下标记设置支持的旋转方向



       6.0之前使用shouldAutorotateToInterfaceOrientation方法来控制方向

     6.0之后使用supportedInterfaceOrientations方法来控制方向


//6.0之前设备旋转调用的方法

//参数:toInterfaceOrientation 表示当前设备所处的方向


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {

    

    if (toInterfaceOrientation == UIInterfaceOrientationPortrait | toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft ) {

        

        if (toInterfaceOrientation == UIInterfaceOrientationPortrait) {

            subView1.frame = CGRectMake(10, 10, 100, 50);

            subView2.frame = CGRectMake(10, 160, 100, 50);

            subView3.frame = CGRectMake(10, 300, 100, 50);

        } else if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {

            subView1.frame = CGRectMake(10, 10, 100, 50);

            subView2.frame = CGRectMake(10, 100, 100, 50);

            subView3.frame = CGRectMake(10, 200, 100, 50);

        }

        

        return YES;

    }

    

    return NO;

}


//6.0之后设置当前控制器界面所支持的方向

- (NSUInteger)supportedInterfaceOrientations {

    

    //获取到状态栏的方向,也就是设备的方向

    UIInterfaceOrientation interface = [UIApplicationsharedApplication].statusBarOrientation;

    

    if (interface == UIInterfaceOrientationPortrait) {

        subView1.frame = CGRectMake(10, 10, 100, 50);

        subView2.frame = CGRectMake(10, 160, 100, 50);

        subView3.frame = CGRectMake(10, 300, 100, 50);

    } elseif(interface == UIInterfaceOrientationLandscapeLeft) {

        subView1.frame = CGRectMake(10, 10, 100, 50);

        subView2.frame = CGRectMake(10, 100, 100, 50);

        subView3.frame = CGRectMake(10, 200, 100, 50);

    }

    //返回朝向的枚举值

    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft;

}



 模态视图

     ◊ 通过视图控制器的presentModalViewController: 方法弹出的视图我们称为模态视图

     ◊ 模态视图出现的场景一般是临时弹出的窗口, 譬如: 登陆窗口

     ◊ 模态视图弹出时通过modalTransitionStyle属性设置不同的动画效果

     ◊ 调用dismissModalViewControllerAnimated: 方法关闭窗口


    ∆ 弹出模态视图    

    //设置弹出的动画效果

    modalCtrl.modalTransitionStyle = UIModalTransitionStylePartialCurl;

    

    //此方法是ios6.0之后新加的方法,如果使用的话,需要考虑版本兼容性问题

    [selfpresentViewController:modalCtrlanimated:YEScompletion:NULL];

    

    //此方法6.0之后不建议使用的方法

    //  [self presentModalViewController:modalCtrl animated:YES];

    

    [self.viewaddSubview:modalCtrl.view];


        ∆ 关闭模态视图


    //关闭当前模态视图

//    [self dismissModalViewControllerAnimated:YES];

    

    // 相当于

//    [self.view removeFromSuperview];

    

    //6.0之后的

    [selfdismissViewControllerAnimated:YEScompletion:NULL];



 Appear这组方法的调用时机:

     当前控制器视图被添加到另一个视图上显示时调用  

       [self.view addSubview:modalCtrl.view];

  viewWillAppear: 和 viewDidAppear: 

     //此控制器的视图将要出现在屏幕上时调用

     - (void)viewWillAppear:(BOOL)animated {

         [superviewWillAppear:animated];

    

         NSLog(@"viewWillAppear");

    }


     //此控制器的视图已经出现在屏幕上时调用

     - (void)viewDidAppear:(BOOL)animated {

         [superviewDidAppear:animated];

         NSLog(@"viewDidAppear");

     }


  Disappear这组方法调用的时机:

       当前视图控制器视图被移除时调用

    [self.view removeFromSuperview];


  viewWillDisappear: 和 viewDidDisappear:



     //视图将要消失时调用

     - (void)viewWillDisappear:(BOOL)animated {

         [superviewWillDisappear:animated];

         NSLog(@"viewWillDisappear");    

     }


     //视图已经消失时调用

     - (void)viewDidDisappear:(BOOL)animated {

         [superviewDidDisappear:animated];

         NSLog(@"viewDidDisappear");        

     }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值