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会清理后台程序,在这个时候会调用该方法,一般情况下,很少会用到这个方法,尽量不要在这个方法里写你的应用逻辑。
UI学习笔记---第三天的更多相关文章
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
sql server 关于表中只增标识问题 由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...
- PyQt4入门学习笔记(三)
# PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...
- C#可扩展编程之MEF学习笔记(三):导出类的方法和属性
前面说完了导入和导出的几种方法,如果大家细心的话会注意到前面我们导出的都是类,那么方法和属性能不能导出呢???答案是肯定的,下面就来说下MEF是如何导出方法和属性的. 还是前面的代码,第二篇中已经提供 ...
- X-Cart 学习笔记(三)X-Cart框架2
目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 3.了解 ...
- Dynamic CRM 2013学习笔记(三十三)自定义审批流4 - 规则节点 -有分支的流程处理
上次介绍过节点的基本配置<Dynamic CRM 2013学习笔记(三十二)自定义审批流3 - 节点及实体配置>,这次介绍下规则节点,因为有时流程里会有一些分支.合并,这时就要用到规则节点 ...
- Dynamic CRM 2013学习笔记(三十七)自定义审批流7 - 初始化(整套审批流下载、安装)
前面介绍了自定义审批流的配置.使用,这篇介绍下如何进行初始化. 一. 下载 从下面的地址下载整个审批流: http://yunpan.cn/cZ5Rdx5HCt3VF 下载完后,一共有三块内容: 二. ...
- .NET Remoting学习笔记(三)信道
目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 参考:♂风车车.Net .NET Framework ...
- opencv学习笔记(三)基本数据类型
opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...
- C#数字图像处理算法学习笔记(三)--图像几何变换
C#数字图像处理算法学习笔记(三)--图像几何变换 几何图像处理包括 图像的平移变换,镜像变换,旋转变换,伸缩变换,在这里仅以水平镜像为例,通过代码来理解其基本操作方式: 翻转前:
随机推荐
- [js]变量声明、函数声明、函数定义式、形参之间的执行顺序
一.当函数声明和函数定义式(变量赋值)同名时 function ledi(){ alert('ledi1'); }; ledi(); var ledi = function (){ alert('le ...
- 让webapi只接受ajax请求
为了测试先做一个简单的webapi,直接用新建项目时默认的就可以了. 在浏览器中测试request get,得到结果 然后再项目中新建一个AjaxOnly的类 AjaxOnly继承Acti ...
- Java异常--读书笔记
1. Java将异常分为两种:Checked异常和Runtime异常,Java认为Checked异常都是可以在编译阶段被处理的异常,所以强制程序处理所有的Checked异常:Runtime异常则无需处 ...
- CSU1022
题目: blue和AutoGerk是好朋友.他们的相同点是都喜欢研究算法,不同点是AutoGerk已是大牛而blue还是菜鸟.blue经常拿一些自以为很难的问题去问AutoGerk,想难倒他,但是每次 ...
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
一.初步了解--指针与取地址 先看程序: #include<cstdio> int main(void) { int num = 7; int *p = # printf( ...
- Asp.net项目因Session阻塞导致页面打开速度变慢
发现罪魁祸首是Session阻塞造成的.默认情况下session状态是“可写状态”(EnableSessionState=”true”),即当用户打开任何一个页面时,该页面的Session就会持有一个 ...
- JSON基础使用
1)JSON概念 JSON 是纯文本 JSON 具有“自我描述性”(人类可读) JSON 具有层级结构(值中存在值) JSON 可通过 JavaScript 进行解析 JSON 数据可使用 AJAX ...
- hibernate缓存和提高效率
1.使用二级缓存,多把大批量的.短期多次的查询数据存到二级缓存中,避免和数据库的多次交互,增加负担.二级缓存加在那些增删改少的,查询多的类中.二级缓存的是对象,如果查出来的不是对象,不会放到缓存中去. ...
- 最新java数组的详解
java中HashMap详解 http://alex09.iteye.com/blog/539545 总结: 1.就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java ...
- PAT 06-2 字符串字母大小写转换
没什么好说的,记得使用ctype.h就好了,谭浩强那本书就介绍了,再不使用就太对不起他老人家了:有一点小小的地方需要注意一下,&&的优先级比=号高,所以getchar()两边没有括号的 ...