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