Day19html
回顾:app
1. UIView的内部布局函数
VC能够对直接子视图布局,可是不能对视图的内部直接布局,因此view必须就有自身 布局的能,经过重写UIView的LayoutSubView方法实现当须要布局的时候,方法执行的顺序oop
a.VC的viewWillLayoutSubView布局
b.View的layoutSubView动画
d.VC的ViewDidLayoutSubViewspa
2. Autoresizing布局orm
利用等比变换的原则,保持视图与父视图的变换比率相同,使用简单,可是使用的效果有限,有时还须要结合手写代码结合实现布局。htm
3 AutoLayout自动布局对象
理念:使用“约束”描述位置,具体的坐标有系统根据约束计算出来
实现:
方法一:在storyboard中利用配置项
方法二:使用代码的方式建立约束
今天:
1.Auto Layout代码建立约束
step1:建立约束对象
NSLayoutConstraint(API )
step2:: 将约束添加到父视图中
方法一:使用万能公式:
+ (id)constraintWithItem:(id)view1
attribute:(NSLayoutAttribute)attr1
relatedBy:(NSLayoutRelation)relation
toItem:(id)view2
attribute:(NSLayoutAttribute)attr2
multiplier:(CGFloat)multiplier
constant:(CGFloat)c
万能公式:"view1.attr1 <relation> view2.attr2 * multiplier + constant".
如button.left=self.view.left*0+20;
button.right=self.view.width*1+(-20);
使用注意事项:translateAutoresizingToConstraints这个属性默认值是YES,这个属性表明将视图默认自带的Autoresizing特性是是否自动转换为对应的约束,既然使用代码来建立约束,那么就不要让系统自带的转换过来的约束影响添加的自定义约束,因此该属性要设置为NO 为了保证效果,能够将视图以及视图的父视图的该属性设置为NO便可。
建立约束对象之后 必定要加到父视图当中
方法二:一次性建立多个约束,使用VFL(Visual Format Language)
+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views
metrics参数
用于指定VFL字符串中能够替换的值,是一个字典类型
如:NSDictionary *metrics = @{@"left":@20,@"space":@10,@"right":@20};
NSDictionaryOfVariableBinding()函数
NSDictionary *dictionary = NSDictionaryOfVariableBindings(b1,b2,b3);
生成的字典以下:
@{@"b1":b1,@"b2":b2,@"b3":b3}
特色:功能强大
1.4 如何写VFL字符串
| 表明倒父视图边界的距离
V: | 垂直方向的高度距离上边界
[]:表明子视图(控件)
():表明一个条件(== >= <=)==时能够省
—表明的是间距 默认值是8
—XXX—表明间距是多少
如: |-20-[button1]-10-[button2(button1)-10-[button3(button1)]-20-|
V:|-20-[button1]
2. 动画(Animation)
2.1 是什么?
“帧动画”:一帧是一张静态你的图片,通常状况下,一秒达到25帧的时候,人眼就分不清楚图片的切换过程了,就产生了连续的效果。
2.2 IOS中的动画
UIImage类:自带一些方法,能够作简单的动画
NSTimer类:间隔指定的时间,产生切换的效果
UIView类:自己提供的功能
底层的core Animation提供了支持动画的底层属性
在IOS7中增长了一些动画功能
UIKit Dynamic 动力
Motion Effects 特效
Sprite Kit(corde 2D引擎)
3. UIImage类动画:
//durantion 播放一组图片用的时间
UIImage *image = [UIImage animatedImageNamed:@"ship-anim" duration:1*5/30];
self.imageView.image = image;
4. NSTimer
方法一:定时器建立后就会自动启动
self.timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(doSomething:) userInfo:nil repeats:YES];
方法二:定时器建立以后,就须要代码启动
self.timer=[NSTimer timerWithTimeInterval:1 target:self selector:@selector(doSomething:) userInfo:nil repeats:YES];
//启动代码
[[NSRunLoop currentRunLoop]addTimer:self.timer forMode:NSDefaultRunLoopMode];
关闭定时器: [self.timer invalidate];
匀速运动
当前值=开始值+当前帧数*(结束值-开始值)/(帧率*动画时长)
这一个值能够是center transform frame alpha
变速运动:
公式:当前值=上一次的值+(目标值-上一次值)*渐进因子
5. UIView 动画:真正的动画有专门的API
5.1 是什么?
有UIKit专门制做的动画API 这些API的底层对Core Animation的封装 既能够实现动画,不该再计算每一帧来实现动画的效果
5.2 制做动画的步骤:
step1:设置须要动画视图的初始值
step2:给UIView类发消息 告诉UIView类须要什么样的动画
step3:将动画结束的状态写入到一个Bloack中
5.3 动画的高级选项:
先慢后快再慢
UIViewAnimationOptionCurveEaseInOut
愈来愈快
UIViewAnimationOptionCurveEaseIn
愈来愈慢
UIViewAnimationOptionCurveEaseOut
匀速
UIViewAnimationOptionCurveLinear
动画重复
UIViewAnimationOptionRepeat
反着执行动画,要配合Repeat选项
UIViewAnimationOptionAutoreverse