UI学习笔记---第三天

视图控制器

功能:视图大小变换 \布局视图\响应事件\检测处理内存警告\检测以及处理屏幕旋转\检测视图切换

MVC (model View controller)

UIViewController是MVC设计模式的核心.

MVC是一个框架级的设计模式

M是Model,主要⽤于建⽴数据模型(即数据的结构)

V是View,我们能看到的所有控件都是view,view主要的功能是展⽰数据。

C是控制器,主要是控制M和V的通信

V只负责显示不负责事件处理.

一些button事件应该在控制器中写方法,不要再button建立时候写

 1.在自定义View中添加控件

2.千万不要在View添加点击事件

 

controller主要控制M和V的通信.

如何使用:

1.定义UIViewController的子类

2.创建视图控制器对象,作为window的根视图控制器

3.viewDidLoad中使用默认创建好的视图对象view(self.view)

每一个视图控制器被实例化的时候都天生有一个View属性,这个View就是他自己管理的那个View

 需要了解控制器中方法的执行顺序,可以更好的控制视图

.视图控制器指定自定义View

//视图控制器自带的View是一个空白的View

//如果我们实现一个loginView,我们需要在空白的View上面添加很多的控件

A view controller is usually owned by a window or another view controller.

当调用到View的时候就会加载视图了.

lazy loading:需要的时候加载,不需要的时候一定不加载.如果一直不调用view那么就一直不会加载

如何设置

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

重写controller的loadView方法。创建⾃定义视图对象,并指定为controller 的view。

将⼦视图控件对象设置为自定义视图类的属性,在viewController中进⾏设 置:添加action、设置delegate等。

在controller中添加按钮点击事件实现和代理⽅法的实现

屏幕旋转

检测屏幕旋转

视图控制器本⾝身能检测到屏幕的旋转,如果要处理屏幕旋转,需要重写⼏几个⽅法:

1. supportedInterfaceOrientations(设置设备支持旋转的方向)

2. willRotateToInterfaceOrientation:duration:(暂停音乐、关闭视图交互等)

3. willAnimateRotationToInterfaceOrientation:duration:(添加⾃定义动画 等)

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

视图处理

注意视图控制器会⾃动调整view的⼤小以适应屏幕旋转,bounds被修改,触发view的layoutSubviews⽅方法。

view重写layoutSubviews⽅法,根据设备方向,重新布局。

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

处理内存警告

控制器能监测内存警告,以便我们避免内存不够引起的crash。

在定义的controller⼦类中重写didReceiveMemoryWarning方法。

释放暂时不使用的资源。(数据对象、图像)

容器视图控制器

常用方法

self.view显⽰示:viewWillAppear: 和 viewDidAppear:

self.view消失:viewWilDisappear: 和 viewDidDisappear:

当self.view添加到⽗视图上时,执行appear方法;当self.view从⽗视图上移除时,执⾏disappear方法。

演示执行顺序

定义FirstViewController、SecondViewController类,first作为window的根视图控制器。

将SecondViewController的view添加到FirstViewController的view上。

将SecondViewController的view移除。

查看SecondViewController中4个方法的执行顺序。

对iOS程序执行流程的理解(摘录)

程序到底是怎么执行的? 1. 当你单击iPhone上的应用程序图标的时候,系统就会查找这个程序的入口地址,即main函数在内存代码区的首地址.然后执行main函数里的程序,这里main函数里仅有一句: return UIApplicationMain(argc, argv, nil, NSStringFromClass([ZHAppDelegate class]));

2. 上面的这句话有什么作用呢?他会创建一个单例的application对象,这在系统中表征这个程序的存在,生命周期;建立事件循环,如不断的检查程序的运行状态,是否被触摸,摇晃等;还有就是建立一个application的delegate,delegate的作用是根据应用程序的状态并作出相应的处理,比如程序启动了,进入活跃状态,进入非活跃状态,将要进入前台,将要进入后台,程序将要结束等消息.这是主程序传递过来的又delegate代理完成的,因为主程序的侧重点不在此(猜测),

3. 那么这个代理的具体都做些什么事呢?在程序加载的时候,主程序会根据不同的情况给代理发送相应的消息,处理上面代理完成的辅助功能外,最总要的时delegate会创建一个window,这个window像个画板一样把视图呈现给用户.如果我们使用mvc模式设计程序,那么我们会把window的管理权交给一个叫做controler(管理器),也就是mvc中的c来管理.controler的作用是用来往window上加载视图,这里我们可以猜测,controller原则上可以有很多个,哪个controler拥有了对window的管理权,谁就可以往window上加载视图.

4. Controller的都有什么作用或者controler是怎么工作的呢?加载视图的时候首先会初始化函数(或者实例化)一个controler类的对象,由它来调用自己所在类的方法管理视图,controller所在的类都有哪些方法呢?最典型的方法有loadView方法(加载视图). viewDidLoad(视图加载完成), didReceiveMemoryWarning(内存警告)等.

 

ViewController的生命周期包括: 
Initialize 
ViewDidLoad 
ViewWillAppear 
ViewDidAppear 
ViewWillDisappear 
ViewDidDisappear 
ViewDidUnload 
Dispose 

      对于Application来说,ViewController的每个阶段都对应了一个方法,IOS会在适当的时间调用对应的方法,因此,我们可以在每个方法中添加对应的代码来做我们想做的事。需要注意的是,这些方法都是为ViewController服务的,对于Views对象来说,是没有这些方法的。 
       View的生命周期方法如下: 

   * ViewDidLoad - Called when you create the class and load from xib. Great for initial setup and one-time-only work 

   * ViewWillAppear - Called right before your view appears, good for hiding/showing fields or any operations that you want to happen every time before the view is visible. Because you might be going back and forth between views, this will be called every time your view is about to appear on the screen 

   * ViewDidAppear - Called after the view appears - great place to start an animations or the loading of external data from an API. 

   * ViewWill/DidDisappear - Same idea as the WillAppear. 

   * ViewDidUnload/Dispose - Available to you,  In objective-c, this is where you do your cleanup and release of stuff, but this is handled automatically so not much you really need to do here. 

Application的生命周期包括: 
      在IOS中,生命周期就是由一系列的方法构成, 对于一个App来说,涉及到的生命周期有: 
1、点击icon启动,对应的方法有: 
      didFinishLaunchingWithOptions: 
      applicationDidBecomeActive: 
2、按下Home键,返回桌面,对应方法: 
      applicationWillResignActive 
      applicationDidBecomeInactive 
3、再点击icon回到前台,对应方法: 
      applicationWillEnterForegroud 
      applicationDidBecomeActive 
4、Application忽然被终止,对应方法: 
     applicationWillTerminate 
     这儿需要注意,点2下home键,把后台程序关掉不会调用这个方法,在苹果的IOS开发指南上有如下描述: 
”Even if you develop your application using iPhone SDK 4 and later, you must still be prepared for your application to be terminated. If memory becomes constrained, the system might remove applications from memory in order to make more room. If your application is currently suspended, the system removes your application from memory without any notice. However, if your application is currently running in the background, the system does call the applicationWillTerminate:method of the application delegate. Your application cannot request additional background execution time from this method.“ 就是说,在机器内存不足时,IOS会清理后台程序,在这个时候会调用该方法,一般情况下,很少会用到这个方法,尽量不要在这个方法里写你的应用逻辑。 

你可能感兴趣的:(学习笔记)