亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS動畫——UIKit動畫

2019-11-14 18:30:05
字體:
來源:轉載
供稿:網友

iOS動畫

iOS有很多動畫技術,API主要分布在兩個庫中,一個是UIKit,另一個是CoreAnimation,先對UIKit動畫做一下總結。

 

UIKit動畫

在UIKit中,很多API都可以看到animated參數,表示是否動畫顯示,其實這是UIKit封裝CoreAnimation后的結果。

比如大家肯定都寫過模態視圖和導航控制器,他們在視圖展示的時候都會有一個animated參數。

[self.navigationController pushViewController:vc animated:YES];[self PResentViewController:vc animated:YES completion:nil];

這些動畫除了系統提供,其實我們是可以自己定制的,這里先簡單提一下,下面在詳細說。

 

主要API

UIKit主要API散落在UIView+UIViewAnimationWithBlocks和UIView+UIViewKeyframeAnimations兩個分類

@interface UIView(UIViewAnimationWithBlocks)+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion + (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion + (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion+ (void)performSystemAnimation:(UISystemAnimation)animation onViews:(NSArray *)views options:(UIViewAnimationOptions)options animations:(void (^)(void))parallelAnimations completion:(void (^)(BOOL finished))completion @end@interface UIView (UIViewKeyframeAnimations)+ (void)animateKeyframesWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewKeyframeAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion+ (void)addKeyframeWithRelativeStartTime:(double)frameStartTime relativeDuration:(double)frameDuration animations:(void (^)(void))animations NS_AVAILABLE_IOS(7_0);@end

我們每個API挨著看一下

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion 

這個是動畫的一個常用API,用于創建常用的動畫,參數列表如下

參數說明
duration持續時間
delay延時時間開始
options動畫選項(下面詳細解釋)
animations動畫block
completion動畫結束后的回調

 

 

 

 

 

 

下面我們看一個動畫例子:

    [UIView animateWithDuration:0.5 delay:1.0 options:UIViewAnimationOptionAutoreverse animations:^{        CGRect frame = testView.frame;        frame.origin.y += 100;        testView.frame = frame;    } completion:^(BOOL finished) {        btn.hidden = YES;    }];

這是在按鈕click事件里面的一段代碼,btn就是該按鈕,testView定義如下

    testView = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];    testView.backgroundColor = [UIColor blackColor];    [self.view addSubview:testView];

大家運行代碼會發現,1秒后動畫開始,運行了0.5秒,視圖先向下再向上運動100回到原點,然后突然跳到100的位置按鈕消失。

回到原點的原因是我們options寫了UIViewAnimationOptionAutoreverse動畫選項,該項會在東環正向運行后自動翻轉動畫運行一遍。

大家應該能開出來options可以設置動畫的一些行為

options大體上可以分為三類,分為動畫屬性,動畫線性關系,和動畫轉場效果。

動畫屬性:

UIViewAnimationOptionLayoutSubviews在AutoLayout下,如果修改AutoLayout,那么子視圖也會跟著一起變化
UIViewAnimationOptionAllowUserInteraction在動畫時,允許用戶交互,比如按鈕在運動者還可以點擊
UIViewAnimationOptionBeginFromCurrentState從當前狀態開始動畫
UIViewAnimationOptionRepeat重復動畫
UIViewAnimationOptionAutoreverse動畫執行完畢自動翻轉
UIViewAnimationOptionOverrideInheritedDuration忽略外層動畫嵌套的執行時間
UIViewAnimationOptionOverrideInheritedCurve忽略外層動畫線性關系

 

 

 

 

 

 

 

 

動畫線性關系

UIViewAnimationOptionShowHideTransitionViews用顯隱的方式替代添加移除圖層的動畫效果
UIViewAnimationOptionOverrideInheritedOptions忽略嵌套繼承的選項
UIViewAnimationOptionCurveEaseInOut時間曲線函數,由慢到快
UIViewAnimationOptionCurveEaseIn時間曲線函數,由慢到特別快
UIViewAnimationOptionCurveEaSEOut時間曲線函數,由快到慢
UIViewAnimationOptionCurveLinear時間曲線函數,勻速

 

 

 

 

 

 

 

動畫轉場效果

UIViewAnimationOptionTransitionNone無轉場動畫
UIViewAnimationOptionTransitionFlipFromLeft轉場從左翻轉
UIViewAnimationOptionTransitionFlipFromRight轉場從右翻轉
UIViewAnimationOptionTransitionCurlUp上卷轉場
UIViewAnimationOptionTransitionCurlDown下卷轉場
UIViewAnimationOptionTransitionCrossDissolve轉場交叉消失
UIViewAnimationOptionTransitionFlipFromTop轉場從上翻轉
UIViewAnimationOptionTransitionFlipFromBottom轉場從下翻轉

 

 

 

 

 

 

 

 

轉場動畫

轉場動畫的API如下,是為了控制視圖的跳轉而使用的

[UIView transitionWithView:subView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{        [subView addSubview:testView];} completion:^(BOOL finished) {        }];

運行這段代碼可以看到視圖被翻轉過來的時候添加了testView在上面。

[UIView transitionFromView:subView toView:testView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];

這個方法可以控制一個控制器中的視圖切換。

 

關鍵幀動畫:

[UIView animateKeyframesWithDuration:2 delay:0 options:UIViewKeyframeAnimationOptionCalculationModeLinear animations:^{        [UIView addKeyframeWithRelativeStartTime:0 relativeDuration:0.25 animations:^{            CGRect frame = testView.frame;            frame.origin.y += 100 * flag;            testView.frame = frame;        }];        [UIView addKeyframeWithRelativeStartTime:0.25 relativeDuration:0.25 animations:^{            CGRect frame = testView.frame;            frame.origin.y -= 100 * flag;            testView.frame = frame;        }];        [UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.5 animations:^{            CGRect frame = testView.frame;            frame.origin.y += 200 * flag;            testView.frame = frame;        }];    } completion:^(BOOL finished) {        btn.hidden = YES;    }];

可以看到,關鍵幀動畫我們很方便的可以控制動畫的整個過程,addKeyframeWithRelativeStartTime:是添加關鍵幀方法,參數startTime是一個在0~1之間的數字,表示開始時間占總時間的%多少,比如上例中的第一幀就是0,第二針就是25%也就是在0.5秒開始。relativeDuration和開始時間一樣,是運行時間占整個時間的百分比。

 

彈簧動畫

    [UIView animateWithDuration:0.5 delay:1.0 usingSpringWithDamping:1 initialSpringVelocity:0.1 options:UIViewAnimationOptionAutoreverse animations:^{        CGRect frame = testView.frame;        frame.origin.y += 100 * flag;        testView.frame = frame;    } completion:^(BOOL finished) {        btn.hidden = YES;    }];

彈簧動畫的阻尼值,也就是相當于摩擦力的大小,該屬性的值從0.0到1.0之間,越靠近0,阻尼越小,彈動的幅度越大,反之阻尼越大,彈動的幅度越小,如果大道一定程度,會出現彈不動的情況。

彈簧動畫的速率,或者說是動力。值越小彈簧的動力越小,彈簧拉伸的幅度越小,反之動力越大,彈簧拉伸的幅度越大。這里需要注意的是,如果設置為0,表示忽略該屬性,由動畫持續時間和阻尼計算動畫的效果。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品一区中文字幕| 久久精品国产v日韩v亚洲| 欧美成人精品在线| 欧美一级片久久久久久久| 亚洲第一免费网站| 亚洲精品久久7777777| 国产一区二区三区高清在线观看| 欧美亚洲另类激情另类| 日韩福利伦理影院免费| 福利视频导航一区| 91av视频在线观看| 日韩中文字幕在线| 国产精品国产三级国产aⅴ浪潮| 日韩女优在线播放| 97精品国产91久久久久久| 国产精品88a∨| 亚洲精品有码在线| 青青在线视频一区二区三区| 久久99久久99精品中文字幕| 精品日韩中文字幕| 好吊成人免视频| 亚洲一区二区三区xxx视频| 免费不卡欧美自拍视频| 97精品视频在线播放| 国内外成人免费激情在线视频| 亚洲乱码国产乱码精品精天堂| 日韩精品视频在线免费观看| 日本中文字幕不卡免费| 最新国产精品亚洲| 国产香蕉精品视频一区二区三区| 97久久伊人激情网| 久久av红桃一区二区小说| 97在线看免费观看视频在线观看| 日韩在线观看免费全| 日韩大片免费观看视频播放| 国产一区二区三区在线免费观看| 91老司机精品视频| 亚洲韩国欧洲国产日产av| 成人av色在线观看| 97超视频免费观看| 97在线免费视频| 亚洲精品女av网站| 亚州成人av在线| 久久免费视频在线观看| 一区二区三区 在线观看视| 亚洲精品欧美日韩专区| 欧美做受高潮1| 日韩精品视频在线观看网址| 国产va免费精品高清在线| 国产情人节一区| 欧美激情a∨在线视频播放| 国产精品扒开腿做爽爽爽男男| 久久精品2019中文字幕| 日韩欧美在线看| 高清欧美性猛交xxxx黑人猛交| 亚洲精品一区二区久| 亚洲日本欧美中文幕| 欧美午夜激情在线| 51视频国产精品一区二区| 91精品久久久久久久久久久久久| 亚洲xxx自由成熟| 91中文在线视频| 欧美日产国产成人免费图片| 国产精品久久久久久av福利软件| 国产精品久久久久久影视| 国产欧美久久久久久| 久久精品中文字幕一区| 欧美电影在线免费观看网站| 国产一区红桃视频| 国产精品久久久久高潮| 成人久久一区二区三区| 欧美在线观看日本一区| 午夜精品蜜臀一区二区三区免费| 最新91在线视频| 北条麻妃在线一区二区| 亚洲国产日韩欧美在线99| 成人国内精品久久久久一区| 亚洲第一精品福利| 亚洲欧洲一区二区三区久久| 欧美另类暴力丝袜| 91免费国产网站| 日本道色综合久久影院| 国产91av在线| 91精品国产高清久久久久久久久| 波霸ol色综合久久| 九九热这里只有精品6| 中文字幕av一区二区三区谷原希美| 国产欧美一区二区三区久久人妖| 成人日韩在线电影| 国产视频999| 91系列在线播放| 国产视频久久久| 亚洲欧美制服中文字幕| 久久av在线看| 九九精品视频在线| 亚洲精品动漫久久久久| 一本色道久久综合狠狠躁篇的优点| 91免费综合在线| 国产精品在线看| 97精品视频在线观看| 久久久久久久久久久91| 日韩精品在线观看网站| 91香蕉嫩草神马影院在线观看| 久久精品一偷一偷国产| 欧美午夜女人视频在线| 亚洲国产成人在线视频| 亚洲欧洲一区二区三区在线观看| 国产一区二区三区精品久久久| 亚洲久久久久久久久久久| 亚洲一区二区三区视频播放| 午夜精品一区二区三区av| 久久久黄色av| 欧美情侣性视频| 欧洲精品在线视频| 韩国日本不卡在线| 亚洲精品999| 亚洲精品国产成人| 亚洲男人天堂2023| 亚洲精品国产精品乱码不99按摩| 福利视频一区二区| 久久在线免费观看视频| 亚洲欧洲高清在线| 欧洲午夜精品久久久| 国产精品视频久久久久| 日韩有码在线播放| 不卡av电影在线观看| 九九久久久久久久久激情| 日韩的一区二区| 日韩欧美一区二区三区久久| 奇米成人av国产一区二区三区| 91po在线观看91精品国产性色| 亚洲aⅴ男人的天堂在线观看| 97国产真实伦对白精彩视频8| 久久久成人精品视频| 日本免费一区二区三区视频观看| 亚洲欧美综合另类中字| 欧美日韩成人精品| 久久久国产一区二区三区| 久久成人18免费网站| 久久99国产综合精品女同| 国产在线观看一区二区三区| 欧美中文字幕在线播放| 成人黄色av免费在线观看| 国产精品久久久久久久久久久不卡| 国内精品久久久久久久久| 91av免费观看91av精品在线| 日本亚洲欧洲色| 视频直播国产精品| 亚洲午夜精品视频| 在线亚洲午夜片av大片| 日韩中文字幕在线播放| 日韩一区二区av| 国产精品免费一区豆花| 成人中文字幕+乱码+中文字幕| 91成人性视频| 欧美老肥婆性猛交视频| 欧美性xxxx极品高清hd直播| 日韩色av导航| 成人有码在线播放| 午夜美女久久久久爽久久| 麻豆国产精品va在线观看不卡| 国产精品极品美女在线观看免费| 亚洲国产精品热久久| 在线播放精品一区二区三区|