视图控制器

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

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会清理后台程序,在这个时候会调用该方法,一般情况下,很少会用到这个方法,尽量不要在这个方法里写你的应用逻辑。

UI学习笔记---第三天的更多相关文章

  1. sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)

    sql server 关于表中只增标识问题   由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...

  2. PyQt4入门学习笔记(三)

    # PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...

  3. C#可扩展编程之MEF学习笔记(三):导出类的方法和属性

    前面说完了导入和导出的几种方法,如果大家细心的话会注意到前面我们导出的都是类,那么方法和属性能不能导出呢???答案是肯定的,下面就来说下MEF是如何导出方法和属性的. 还是前面的代码,第二篇中已经提供 ...

  4. X-Cart 学习笔记(三)X-Cart框架2

    目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 3.了解 ...

  5. Dynamic CRM 2013学习笔记(三十三)自定义审批流4 - 规则节点 -有分支的流程处理

    上次介绍过节点的基本配置<Dynamic CRM 2013学习笔记(三十二)自定义审批流3 - 节点及实体配置>,这次介绍下规则节点,因为有时流程里会有一些分支.合并,这时就要用到规则节点 ...

  6. Dynamic CRM 2013学习笔记(三十七)自定义审批流7 - 初始化(整套审批流下载、安装)

    前面介绍了自定义审批流的配置.使用,这篇介绍下如何进行初始化. 一. 下载 从下面的地址下载整个审批流: http://yunpan.cn/cZ5Rdx5HCt3VF 下载完后,一共有三块内容: 二. ...

  7. .NET Remoting学习笔记(三)信道

    目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 参考:♂风车车.Net .NET Framework ...

  8. opencv学习笔记(三)基本数据类型

    opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...

  9. C#数字图像处理算法学习笔记(三)--图像几何变换

    C#数字图像处理算法学习笔记(三)--图像几何变换 几何图像处理包括 图像的平移变换,镜像变换,旋转变换,伸缩变换,在这里仅以水平镜像为例,通过代码来理解其基本操作方式: 翻转前:

随机推荐

  1. FloatingActionButton增强版,一个按钮跳出多个按钮--第三方开源--FloatingActionButton

      FloatingActionButton项目在github上的主页:https://github.com/futuresimple/android-floating-action-button F ...

  2. S1:变量

    接触JS一段时间了,但总感觉不得要领,技术得不到提升,翻来覆去,决定对基础知识做一次系统的整理,要坚持每一天都有新的收获 ! 变量,即通过一个名字将一个值关联起来,以后通过变量就可以引用到该值,比如: ...

  3. Ubuntu14.04安装和配置ROS Indigo(一)

    安装ROS 配置Ubuntu的软件源 配置Ubuntu要求允许接受restricted.universe和multiverse的软件源,可以根据下面的链接配置: https://help.ubuntu ...

  4. [开发笔记]-多线程异步操作如何访问HttpContext?

    如何获取文件绝对路径? 在定时器回调或者Cache的移除通知中,有时确实需要访问文件,然而对于开发人员来说, 他们并不知道网站会被部署在哪个目录下,因此不可能写出绝对路径, 他们只知道相对于网站根目录 ...

  5. Highcharts导出gb2312乱码问题

    Highcharts是utf-8编码的,其本地的.net导出环境也是utf-8格式的,导致网页如果采用gb2312编码,显示正常,导出就乱码了.这种现象也同样经常出现在ajax的使用过程中. ajax ...

  6. [安卓][转]Android eclipse中程序调试

    一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.步骤如下.1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoi ...

  7. SharePoint安全 - 在Goolge和Bing中查找SharePoint相关内容

    博客地址 http://blog.csdn.net/foxdave 本篇提供两个查询串字典,分别对应Google和Bing的搜索,用来查询SharePoint网站的相关内容 Google ShareP ...

  8. MongoDB 聚合 (转) 仅限于C++开发

    MongoDB除了基本的查询功能,还提供了很多强大的聚合工具,其中简单的可计算集合中的文档个数, 复杂的可利用MapReduce做复杂数据分析. 1.count count返回集合中的文档数量 db. ...

  9. 转 15款免费WiFi(入侵破解)安全测试工具

    转:http://www.ctocio.com/security/cloudsecurity/6594.html 一.Vistumbler扫描器 WiFi 扫描器能能发现附近AP的详细信息,例如信号强 ...

  10. 另类加载dll---快捷方式启动参数

    http://blogs.360.cn/360safe/2014/08/29/cnc_trojan_and_fake_proto/ 原文: BMP1和BMP2是两个lnk文件(快捷方式),我们知道bm ...