UIReview(UI总结)
UIReview(UI总结)
1.UIView
UIWindow: 窗口类, 一般和屏幕大小保持一致, 一个应用至少要有一个窗口, 用于展示内容
1, 3g, 3gs, 4, 4s : 320 * 480
5, 5c, 5s : 320 * 568
6, 6s : 375 * 667
6 Plus, 6s Plus : 414 * 735
程序的执行顺序
a. main函数
b. AppDelegate(UIApplication的代理)
c. didFinishLaunching, 创建window
d. window.rootViewController
UIView(或子类)的创建步骤
a. 开辟内存空间
b. 设置属性
c. 添加到父视图
d. 释放
UIView的属性
a. backgroundColor
b. frame(基于父视图)
c. center(基于父视图)
d. bounds(基于子视图)
e. tag
f. subviews
g. superviews
h. hidden
i. alpha
j. clipsToBounds
坐标和大小相关的类型
CGPoint
CGSize
CGRect
视图层级关系
addSubview
removeFromSuperview
2.UIView的子类
UILabel, 标签视图 numberOfLines
UITextField, 单行文本输入框
UIButton, 按钮(title和image在一层, backgroundImage在后一层)
3.自定义视图和UIViewController
自定义视图的步骤
a. 继承于UIView(或子类)创建一个类
b. 结合控件个数写属性
c. 重写父类的初始化方法, 创建控件(相对坐标, 宏定义)
d. 测试
MVC: Model-View-Controller, 苹果提倡的设计框架
model: 数据模型, 存数据
view: 视图, 展示内容
controller: 控制器, 协调者
model和view是不能够相互通信的, controller是model和view的协调者
view和controller通信的方法: delegate, dataSource, target-action
model和controler的通信方式: KVO, notification
UIViewController执行的过程
a. alloc
b. init
c. loadView(生成UIViewController自带的视图)
d. viewDidLoad所有对UIViewController自带的视图操作, 都必须在执行viewDidLoad之后
e. viewWillAppear
f. viewDidAppear
g. viewWillDisappear
h. viewDidDisappear
4.事件
iOS事件
a. 触摸事件
b. 晃动事件
c. 远程控制
响应者链
UIApplication->UIWindow->UIViewController->UIView
第一响应者, 谁处理这个事件, 谁就是第一响应者
如何捕获触摸事件?
a. 创建继承于UIView的子类
b. 重写touchBegan, touchMoved, touchEnd, touchCancel
5.target-action和delegate
target-action的实现
继承于UIControl, 就具备这个设计模式
delegate
找代理
a. 写协议
b. 写delegate属性(assign)
c. 在合适的时候, 让代理执行协议方法
d. 安全做法: 先判断代理是否实现方法, 再执行
成为代理
a. 指定代理
b. 遵守协议
c. 实现协议方法
6.手势: 对触摸事件的封装
有哪些手势:
a. 点击手势
b. 捏合手势
c. 轻扫手势
d. 长按手势
e. 旋转手势
f. 平移手势
g. 边缘平移手势
7.UIScrollView, 滚动视图
frame, 可视区域大小
contentSize, 内容页大小
8.UINavigationController, 导航控制器
a. 用于管理具有层级关系的视图控制器
b. 以栈的形势管理页面
c. 进入下一个页面, push(入栈)
d. 返回上一个页面, pop(出栈)
e. 自带一个UINavigationbar
f. 每一个视图控制器, 拥有一个UINavigationBar, titleView, leftBarButtonItem(s), rightbarButtonItem(s)
页面间传值
1.属性传值, 从前往后
2.代理传值, 从后往前
3.单例传值, 多个页面间传值
4. block传值, 只要能写出delegate传值, 都可以转化成block传值
9.UItableView, 表视图
tableView的创建 = 视图创建的过程
tableView数据显示
a.指定dataSource
b.完成协议方法(行数, Cell创建)
数据封装
a.数据
b.字典
c.自定义的类
Cell的重用机制
a. 创建标识符
b. 根据标识符去复用池找cell
c. 判断是否找到, 没有找到, 就创建(注册cell)
d. cell上展示数据
e. return cell
tableView层次结构
a. 一个tableview = 一个表头 + 一个表尾 + 多个分区
b. 一个分区 = 一个区头 + 一个区尾 + 多个cell
c.一个cell = contentView + accessoryView
d.一个contentView = textlabel + detailTextLabel + imageView
tableView的编辑(删除和添加)
1.editButtonItem
2.让tableView进入编辑状态
3.指定那些行可以进入编辑状态(YES)
4.指定编辑的样式(删除或添加)
5.完成编辑(先处理数据, 再改变cell)
tableView的移动
1.editButtonItem
2.让tableView进入编辑状态
3.指定那些行可以移动(YES)
4.完成移动(修改数据, 先保留原数据, 删除原数据, 数据插入目标位置, 释放)
5.限制移动
tableViewCell的混合使用
不同的cell要使用不同的标识符
动态cell高度
boundingRectWithSize
a.宽度固定, 高度为0
b.行高 + 行间距
c.指定文字大小(label文字大小一致)
d.label的numberOfLines = 0
c.修改label高度的同时, 修改cell的高度
12.模态切换: 视图控制器没有层级关系时, 使用模态切换
a.present, 切换下一页面
b.dismiss, 返回上一页面
单例
a.保证一个类之生成一个对象
b.单例不会释放, 直到程序结束
c.单例创建方法(+方法, 返回值当前类, main/shared/default + 类名)
d.单例内不能存过大数据
13.UItabBarController, 标签控制器
a.用于管理具有平级关系的视图控制器
b.不需要管理切换
c.被管理的视图控制器放在viewControllers中
d.自带一个UITabBar
e.每一个视图控制器, 都有一个UITabBarItem(image, title, badgeValue)
f.底部最多显示5个视图控制器, 超5个, 最后一个变成more
g.创建一个tabBarController的子类, 把代码封装起来
h.管理的视图控制器, 运行时, 只加载第一个视图控制器, 其他的视图控制器只有在点击时才加载, 且只加载一次
常见的应用构架
a.window的根视图控制器是tabBarController
b.tabBarController管理多个navigationController
c.navigationController管理viewController
14.可视化编程不等于不写代码
a.快述创建并布局
b.逻辑代码需要自己写
c.IBOutlet关联属性
d.IBAction关联方法
e.先选中, 再操作
f.输入内容, 要按回车
g.xib, 一对一, storyboad一对多
h.4个选项卡(类, 属性, 尺寸, 关联)
i.UIStoryboard, 用于管理storyboard文件, 找视图控制器(根视图控制器, 根据标识符找视图控制器)
j.UIStoryboardSegue, 线, 连两个视图控制器
15.数据解析
数据格式, 用于格式化数据
a.XML, 一个节点由开始标签和结束标签组成, 一个节点有一个父节点和多个子节点, 没有父节点就是根节点, 没有子节点就是叶子节点
b.JSON, 数组[]和字典{}相互嵌套
XML解析
a.SAX, 逐行解析, 错误之前的内容能够解析
b.DOM, 整篇解析, 效率高
JSON解析
setValuesForkeys
16.网络请求(HTTP请求)
HTTP请求方式(API文档决定)
a.GET, 参数存放在URL的后面, 以?拼接, 参数要以key = value的形式出现, 多个键值对用&连接
b.POST, 参数存放在HTTPBody
发送请求的方式(由自己决定, 多数使用异步)
a.同步: 必须等到数据返回回来, 当数据比较大时, 就会造成"假死"
b.异步: 发出请求后, 无需等待, 可以执行其他操作
网络请求的过程
a.创建URL
b.创建请求(GET: NSURLRequest, POST: NSMutableRequest)
c.发出请求
d.数据返回(delegate, block)
做一个具有网络请求页面的过程
a.网络请求
b.对得到的数据进行解析
c.对数据进行封装
d.在控件上进行展示
17.综合练习
第三方:
a.AFNetWorking, 网络请求
b.SDWebImage, 异步图片加载
c.SVPullToRefresh, 下拉刷新, 上拉加载
18.数据持久化
a.沙盒机制: iOS系统会为每一个应用单独创建一个文件夹, 这个文件夹只允许当前应用访问
沙盒的文件夹
a. Document, 重要文件夹, 会同步到此文件夹, 内容不能过多
b. Library, 资源文件夹
c. tmp, 临时文件夹
d. *.app, 应用程序包
数据持久化的方式
1.文件读写(字典, 数组, 字符串, 二进制)
2.NSUserDefaults, 单例类(基本数据类型, 对象, URL), 绑定一个plist文件
3.归档(支持自定义类型), 实质: 把数据转成二进制, 再把二进制写入文件, 前期: 遵守<NSCoding>协议, 对类中的属性进行编码和解码
4.sqlite, 轻量级数据库,(创建表, 增删改查)
5.Coredata