iOS学习笔记-----ViewController

一.ViewController介绍

1.视图控制器的概念

  • 视图控制器就像个大管家,用来管理视图的加载、卸载、横屏竖屏显示等操作。
  • 每一个界面都应该由一个控制器来管理显示
  • UIViewController是所有视图控制器的父类
  • iOS提供了许多内置的视图控制器类,以支持标准的用户界面部分,比如导航控制器 (UINavigationController),标签栏控制器(UITabBarController),表视图控制器 (UITableViewController)等

2.视图控制器与视图的关系

  • 视图控制器是传统的Model-View-Controller(MVC)设计模式中 —— 控制器
  • UIViewController提供了许多控制器的基本功能,因为它是所有控制器的基类
  • 视图控制器负责创建和管理一组视图,它本身就提供了一个视图,称为该控制器的根 视图(view),协调管理数据和视图之间的交互

3.ViewController根视图的加载

4.模态视图

模态视图的使用
- 通过视图控制器的presentModalViewController: 方法弹出的视图我们都称为模态视图
- 模态视图出现的场景一般是临时弹出的窗口,譬如:登陆窗口
- 模态视图弹出时通过modalTransitionStyle属性设置不同的动画效果 - 调用 dismissModalViewControllerAnimated: 方法关闭窗口

模态视图的原理
- 我们用 presentModalViewController: animated:打开一个控制器,是把当前控制 器的根视图添加到window上,我们都知道根视图控制器不做显示
- 而且我们通过设置当前控制器的根视图为透明时,视图下面显示的时window,说明 上一个控制器的根视图已经从window上移除掉了,那么我们指导原理是否可以自己写 一个方法弹出视图,并添加我们自己想要的动画效果

模态视图的使用场景
1、收集用户输入信息
2、临时呈现一些内容
3、临时改变工作模式
4、显示一个新的view层级
这几种情形都会暂时中断程序正常的执行流程,主要作用是收集或者显示一些信息。

Presenting 和 Presented
- 当我们在View Controller A中模态显示View Controller B的时候,A就充当 Presenting View Controller(弹出VC),而B就是Presented View Controller(被弹出VC)。
- 官方文档建议这两者之间通过delegate实现交互,因此我们在实际应用中,最好 也遵守这个原则,在被弹出的VC中定义delegate,然后在弹出VC中实现该代理, 这样就可以比较方便的实现两者之间的交互。

5.模态视图的页面传值(使用delegate)

6.UIViewController生命周期

  • UIViewController常用方法
// 创建载入根视图
- (void)loadView;
//视图载入完成
- (void)viewDidLoad;
//视图将出现在屏幕之前
- (void)viewWillAppear:(BOOL)animated;
//视图已在屏幕上渲染完成
- (void)viewDidAppear:(BOOL)animated;
//视图将被从屏幕上移除之前执行
- (void)viewWillDisappear:(BOOL)animated;
//视图已经从屏幕上移除
- (void)viewDidDisappear:(BOOL)animated;
//接收到内存警告
- (void)didReceiveMemoryWarning;
  • UIViewController根视图添加到窗口上

这里写图片描述

- UIViewController根视图从窗口上移除

这里写图片描述

7.视图控制器旋转方向

  • 屏幕旋转时触发调用的方法
//屏幕将要转到时执行
- (void)willRotateToInterfaceOrientation: (UIInterfaceOrientation)toInterfaceOrientation duration: (NSTimeInterval)duration;
//屏幕转动结束后触发
- (void)didRotateFromInterfaceOrientation:
(UIInterfaceOrientation)fromInterfaceOrientation;
  • 屏幕旋转时触发调用的方法——状态栏改变
- (void)registerDeviceOriention { 
 //注册监听状态栏变化的通知
 [[NSNotificationCenter defaultCenter]
           addObserver:self
              selector:@selector(statusBarOrientationChange:)
                  name:UIApplicationDidChangeStatusBarOrientationNotification
                object:nil];
}
//通知方法
- (void)statusBarOrientationChange:(NSNotification *)notification {
       UIInterfaceOrientation oriention =
           [UIApplication sharedApplication].statusBarOrientation;
//根据oriention(旋转方向) 改变frame等布局信息 }

//iOS8及以上版本,statusBarOrientationChange在旋转结束后调用
//iOS8以下版本,statusBarOrientationChange在旋转前调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值