UIView Animation
UIView和動畫相關(guān)的category如下
UIView+UIViewAnimation.h
UIView+UIViewAnimationWithBlocks.h
UIView+UIViewKeyframeAnimations.h
基本的動畫使用
-
采用begin&commit
//改變view的大小
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
self.frame = CGRectMake(_copyBtn.frame.origin.x, _copyBtn.frame.origin.y + _copyBtn.frame.size.height, _copyBtn.frame.size.width, tableHeight);
_tableView.frame = CGRectMake(0, 0, _copyBtn.bounds.size.width, tableHeight);
[UIView commitAnimations];
可以設(shè)置多種animation屬性噩凹,具體可以見`UIView+UIViewAnimation.h`
2. 采用block方式
~~~
//options中的可以進(jìn)行疊加士复,具體可以見UIViewAnimationOptions
[UIView animateWithDuration:0.5 delay:1.2 options:UIViewAnimationOptionCurveEaseIn animations:^{
//...
} completion:^(BOOL finished) {
//...
}];
該方法具體可以見UIView+UIViewAnimationWithBlocks.h
彈簧效果動畫
[UIView animateWithDuration:0.5 delay:0.0 usingSpringWithDamping:0.5 initialSpringVelocity:4 options:UIViewAnimationOptionCurveEaseIn animations:^{
self.frame = CGRectMake(_copyBtn.frame.origin.x, _copyBtn.frame.origin.y + _copyBtn.frame.size.height, _copyBtn.frame.size.width, tableHeight);
_tableView.frame = CGRectMake(0, 0, _copyBtn.bounds.size.width, tableHeight);
} completion:^(BOOL finished) {
//...
}];
- usingSpringWithDamping:彈簧動畫的阻尼值讲岁,也就是相當(dāng)于摩擦力的大小颂鸿,該屬性的值從0.0到1.0之間,越靠近0李根,阻尼越小槽奕,彈動的幅度越大,反之阻尼越大房轿,彈動的幅度越小粤攒。
- initialSpringVelocity:彈簧動畫的速率,或者說是動力囱持。值越小彈簧的動力越小夯接,彈簧拉伸的幅度越小,反之動力越大纷妆,彈簧拉伸的幅度越大盔几。這里需要注意的是,如果設(shè)置為0掩幢,表示忽略該屬性逊拍,由動畫持續(xù)時間和阻尼計算動畫的效果。
該方法具體可以見UIView+UIViewAnimationWithBlocks.h
過渡效果動畫
[UIView transitionWithView:_cardImageView duration:0.5 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
//...
} completion:^(BOOL finished) {
//...
}];
// toView:替換后的視圖, fromView:被替換的視圖
+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);
這種很類似ppt中動畫效果际邻,具體的展示是通過options
參數(shù)芯丧,可以見UIViewAnimationOptions
關(guān)鍵幀動畫
[UIView animateKeyframesWithDuration:1.2 delay:0.0 options:UIViewKeyframeAnimationOptionCalculationModeLinear animations:^{
//添加第一幀動畫
[UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.5 animations:^{
_cardOne.frame = CGRectMake(0, 50, imageSize, imageSize);
}];
//添加第二幀動畫
[UIView addKeyframeWithRelativeStartTime:0.2 relativeDuration:1 animations:^{
//...
}];
} completion:^(BOOL finished) {
//...
}];
關(guān)鍵幀的動畫效果是由UIViewKeyframeAnimationOptions
定義的,在添加關(guān)鍵幀的方法中參數(shù)含義表示
- startTime:關(guān)鍵幀開始時間枯怖,該時間是相對整個關(guān)鍵幀動畫持續(xù)時間的相對時間注整,一般值在0到1之間。如果為0度硝,則表明這一關(guān)鍵幀從整個動畫的第0秒開始執(zhí)行肿轨,如果設(shè)為0.5,則表明從整個動畫的中間開始執(zhí)行蕊程。
- relativeDuration:關(guān)鍵幀持續(xù)時間椒袍,該時間同樣是相對整個關(guān)鍵幀動畫持續(xù)時間的相對時間,一般值也在0到1之間藻茂。如果設(shè)為0.25驹暑,則表明這一關(guān)鍵幀的持續(xù)時間為整個動畫持續(xù)時間的四分之一。
- animations:設(shè)置視圖動畫屬性的動畫閉包辨赐。
1.常規(guī)動畫屬性設(shè)置(可以同時選擇多個進(jìn)行設(shè)置)
UIViewAnimationOptionLayoutSubviews:子視圖跟隨父視圖一起動畫
UIViewAnimationOptionAllowUserInteraction:動畫過程中允許用戶交互优俘。
UIViewAnimationOptionBeginFromCurrentState:從當(dāng)前狀態(tài)開始運(yùn)行
UIViewAnimationOptionRepeat:重復(fù)運(yùn)行動畫。
UIViewAnimationOptionAutoreverse:動畫運(yùn)行到結(jié)束點(diǎn)后仍然以動畫方式回到初始點(diǎn)掀序,前提是設(shè)置動畫無限重復(fù)
UIViewAnimationOptionOverrideInheritedDuration:忽略外層嵌套動畫時間設(shè)置
UIViewAnimationOptionOverrideInheritedCurve:忽略外層嵌套動畫速度設(shè)置帆焕。
UIViewAnimationOptionAllowAnimatedContent:動畫過程中重繪視圖,僅適用于轉(zhuǎn)場動畫
UIViewAnimationOptionShowHideTransitionViews:視圖切換時直接隱藏舊視圖不恭、顯示新視圖叶雹,而不是將舊視圖從父視圖移除财饥,僅轉(zhuǎn)場動畫
UIViewAnimationOptionOverrideInheritedOptions:不繼承父動畫設(shè)置或動畫類型。
2.動畫速度控制(可從其中選擇一個設(shè)置)
UIViewAnimationOptionCurveEaseInOut:動畫先緩慢折晦,然后逐漸加速
UIViewAnimationOptionCurveEaseIn:動畫逐漸變慢
UIViewAnimationOptionCurveEaseOut:動畫逐漸加速
UIViewAnimationOptionCurveLinear:動畫勻速執(zhí)行钥星,默認(rèn)值。
3.轉(zhuǎn)場類型(僅適用于轉(zhuǎn)場動畫設(shè)置满着,可以從中選擇一個進(jìn)行設(shè)置谦炒,基本動畫、關(guān)鍵幀動畫不需要設(shè)置)
UIViewAnimationOptionTransitionNone:沒有轉(zhuǎn)場動畫效果漓滔。
UIViewAnimationOptionTransitionFlipFromLeft:從左側(cè)翻轉(zhuǎn)效果编饺。
UIViewAnimationOptionTransitionFlipFromRight:從右側(cè)翻轉(zhuǎn)效果响驴。
UIViewAnimationOptionTransitionCurlUp:向后翻頁的動畫過渡效果。
UIViewAnimationOptionTransitionCurlDown:向前翻頁的動畫過渡效果秽誊。
UIViewAnimationOptionTransitionCrossDissolve:舊視圖溶解消失顯示下一個新視圖的效果锅论。
UIViewAnimationOptionTransitionFlipFromTop:從上方翻轉(zhuǎn)效果楣号。
UIViewAnimationOptionTransitionFlipFromBottom:從底部翻轉(zhuǎn)效果炫狱。
CAMediaTiming
CAMediaTiming
是一個協(xié)議,CALayer
和CAAnimation
都實現(xiàn)該協(xié)議嬉荆;描管理動畫過程的時間鄙早,主要屬性如下
//動畫開始之前的的延遲時間,相對于父級對象的開始時間椅亚;設(shè)置延遲時需要注意CACurrentMediaTime()+延遲的秒數(shù)
@property CFTimeInterval beginTime;
//動畫一次運(yùn)行的時間呀舔,默認(rèn)為0.25s
@property CFTimeInterval duration;
//動畫執(zhí)行的速度,是相對父級對象而言,如果子對象是2.0的速度,那么子對象的2s相對于父對象時間中的1s
@property float speed;
//動畫開始時的偏移粥庄,即從第timeOffset直接開始執(zhí)行豺妓,但仍然會執(zhí)行一個完整的時長,比如duration是5s,offset是2s琳拭,會變成先2s-5s執(zhí)行白嘁,然后0s-2s執(zhí)行
@property CFTimeInterval timeOffset;
//動畫重復(fù)運(yùn)行的次數(shù),默認(rèn)為1次
@property float repeatCount;
//動畫重復(fù)運(yùn)行的總時間
@property CFTimeInterval repeatDuration;
//動畫是否自動回轉(zhuǎn)運(yùn)行一次絮缅,默認(rèn)為no
@property BOOL autoreverses;
//決定動畫對象在非active時間段的行為耕魄。比如動畫開始之前,動畫結(jié)束之后
//如果想讓對象保持顯示動畫執(zhí)行后的狀態(tài)允扇,需要設(shè)置removedOnCompletion為NO考润,fillMode為kCAFillModeForwards
@property(copy) NSString *fillMode;
Layer Animation
可以參看我之前發(fā)布的ios 動畫基礎(chǔ)(一)额划,這邊寫了一個小demo
利用AnimationGroup
實現(xiàn)卡片切換動畫俊戳,CATransition
展示的過渡效果