一、 Autolayout的对齐与等宽
1.对其
两个控件都没有描述清楚,以先创建的控件为准。
两个控件有一个描述清楚,以描述清楚的控件为准。
2.等宽
两个控件都没有描述清楚,以控件的默认的为准。
两个控件有一个描述清楚,以描述清楚的控件为主。
二、VFL(Visual Format Language)
1. 是什么
是一个字符串,具有一定格式,代表一些约束含义。
2. 方法
constraintWithVisualFormat:option:metrics:view:
3.如何写VFL字符串
| 代表父视图的边
H:| 代表左边 水平
V:| 代表上边 垂直
[]:代表一个子视图(或控件)
():代表一个条件(==,>=,<=)==可以省略
- 代表间距
[button 1]-[textfiled]标准距离8
[button(>=50)]表示button的宽度
|-50-[button]-50-|距父视图左边50 右边50
v:[topbutton]-20-[button]两个按钮的垂直距离
三、动画(Animation)
1.是什么
一般指的是"帧动画",由一帧一帧的静态的图片快速切换达到动画效果。帧代表的就是一张静态图片。
30FPS(帧率)Frame Per Second
人眼是无法分辨25帧以上的图片,感觉上就是动画。
连续画图片的方式叫渲染。(Rendering)
手机上一般也就是30帧,过快会导致费电。
2.IOS中的动画
UIImage类 直接就支持动画
NSTimer类 手工实现动画
UIView类 类方法实现动画(最常用)
Core Animation Framework 底层做动画
IOS7增加:
UIKit Dynamic(动力)
Motion Effects(特效,不能算动画)
Sprite Kit (2D引擎)
IOS8增加:
Sprite Kit (3D引擎)
Coscos2d(OC)/Coscos2dx(C++)跨平台
Metal
3.UIImage动画
最基本动画,使用UIImage对象快速切换图片形成动画效果。做小的动画可以使用。
4.NSTimer手动动画
4.1 是什么
是一个定时器类,用于定时向对象发送消息。
4.2 如何使用
[NSTimer schedule]开头的类方法创建NSTimer对象,对象创建后直接工作
4.3匀速动画
匀速的改变视图的一些值,就可以达到匀速动画的效果。
center transform frame alpha
当前值 = 开始值 + 当前值的帧数*[(结束值 - 开始值)/(帧率*动画时长)]
4.4变速动画
常见情况:
由快到慢
由慢到快
由慢到快再到慢
由快到慢:
当前值 = 上一次值 + (目标值 - 上一次值)*渐变因子
Y = 500 + (100-500)*0.1 = 460 …40
Y = 460 + (100-460)*0.1 = 424 …36
Y = 424 + (100-424)*0.1 = 392 …32
5.UIView动画
5.1 是什么
是UIKit提供专门制作动画的API,其实就是对CoreAnimation的封装。
可以轻松的实现动画,不需要经过计算。
5.2 制作动画的步骤
(1)设置需要动画的视图的初始属性值
(2)给UIView类发消息,告诉UIView类需要什么样的动画。
(3)将动画结束的状态(属性值)写入到Block中
6.UIView高级动画
参数1:动画时长 参数2:延迟的时长
参数3:动画特征 参数4:动画结束值
参数5:动画结束后的处理
[UIView animateWithDuration:delay:option:animations:completion:]
option:动画效果、特征
CocoaLigature0 UIViewAnimationOptionRepeat重复
UIViewAnimationOptionCurveEaseInOut 先慢再快再慢 UIViewAnimationOptionCurveEaseIn 越来越快
UIViewAnimationOptionCurveEaseOut 越来越慢
UIViewAnimationOptionCurveLinear 匀速
UIViewAnimationOptionAutoreverse 反转
可以同时支持多个动画特效,但是要使用"|"符号进行连接。
注:动画效果会与AutoLayout冲突。CocoaLigature1
老语法:
早期的动画api
A.开始动画 [UIView beginAnimations]
B.设置属性值 [UIView setAnimations]
C.结束动画 [UIView commitAnimations]