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

首頁 > 系統 > iOS > 正文

IOS輕松幾步實現自定義轉場動畫

2020-07-26 03:14:48
字體:
來源:轉載
供稿:網友

一、系統提供的轉場動畫

目前,系統給我們提供了push/popspresent/dismiss兩種控制器之間跳轉方.當然,通過設置UIModalTransitionStyle屬性,可以實現下面4種modal效果,相信大家都比較熟悉了,這里就不再展示效果圖.

 UIModalTransitionStyleCoverVertical   // 從下往上, UIModalTransitionStyleFlipHorizontal  // 水平翻轉 UIModalTransitionStyleCrossDissolve   // 淡入淡出 UIModalTransitionStylePartialCurl   // 卷角翻頁

二、自定義轉場動畫使用場景

系統給我們提供的轉場動畫效果較少,并且有時想對系統的效果做一些修改.例如:我們使用淡入淡出的modal效果,系統的動畫時間我們不滿意,希望讓動畫快點,或者慢點.系統并沒有給我提供直接修改的屬性或者方法,那么,這時我們不得不考慮使用自定義轉場動畫來實現我們想要的效果.

三、自定義轉場動畫的實現步驟

第1步:設置需要彈出控制器的modalPresentationStyleUIModalPresentationCustom

 detailVc.modalPresentationStyle = UIModalPresentationCustom;

第2步:設置轉場代理

detailVc.transitioningDelegate = self

可以抽一個工具類,專門負責轉場動畫

第3步:遵守UIViewControllerTransitioningDelegate代理實現兩個方法

確定誰負責彈出動畫

-(id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source { self.isPresnted = YES; return self;}

確定誰負責動畫消失

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed { self.isPresnted = NO; return self;}

第4步:實現轉場動畫

上面都返回self,說明當前控制器即負責彈出動畫又負責動畫消失,所以具體的轉場動畫在當前控制器中進行.

先確定轉場動畫時間間隔

- (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext { return 1.0;}

再實現具體動畫(由于當前控制器即負責彈出動畫,又負責消失動畫,所以定義一個Bool類型屬性isPresnted加以區分)

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext { if (self.isPresnted == YES) {  //這里做彈出動畫 } else { //這里做消失動畫 }}

小結:

也可以讓不同的控制器分別負責彈出和消失動畫,這樣就不需要定義一個專門用于區分的屬性.個人建議最好是抽取一個專門負責轉場動畫的工具類,讓該工具類負責所有轉場動畫,這樣,不管是從業務邏輯上還是代碼的復用性上都更加好.當然,這樣做存在的一個弊端就是,轉場動畫中需要用到的一些屬性必須通過定義變量,代理和Block等方式傳遞進來,而使用不同的控制器來管理彈出和消失動畫在獲取屬性上更加方便.具體怎樣做,也就仁者見仁,智者見智了.

下面來具體實現一個轉場動畫效果吧

由于實現動畫的核心代碼在第四步,這里也就只看animateTransition:這一個方法啦!

從上往下的Modal效果

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext { if (self.isPresnted == YES) {  //1.取出view  UIView *presentedView = [transitionContext viewForKey:UITransitionContextToViewKey];  //2.放入containerView  [[transitionContext containerView]addSubview:presentedView];  //3.設置基本屬性  presentedView.frame = CGRectMake(0, -667, 375, 667);  //4.動畫  [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{   presentedView.frame = CGRectMake(0, 0, 375, 667);  }completion:^(BOOL finished) {   [transitionContext completeTransition:YES];  }]; } else {  //1.取出view  UIView *dismissedView = [transitionContext viewForKey:UITransitionContextFromViewKey];  //2.放入containerView  [[transitionContext containerView]addSubview:dismissedView];  //3.動畫  [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{   dismissedView.frame =CGRectMake(0, -667, 375, 667);  }completion:^(BOOL finished) {   [transitionContext completeTransition:YES];  }]; }}


模仿系統淡入淡出效果

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext { if (self.isPresnted == YES) {  //1.取出view  UIView *presentedView = [transitionContext viewForKey:UITransitionContextToViewKey];  //2.放入containerView  [[transitionContext containerView]addSubview:presentedView];  //3.設置基本屬性  presentedView.alpha = 0;  //4.動畫  [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{   presentedView.alpha = 1.0;  }completion:^(BOOL finished) {   [transitionContext completeTransition:YES];  }]; } else {  //1.取出view  UIView *dismissedView = [transitionContext viewForKey:UITransitionContextFromViewKey];  //2.放入containerView  [[transitionContext containerView]addSubview:dismissedView];  //3.設置基本屬性  dismissedView.alpha = 1;  //4.動畫  [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{   dismissedView.alpha = 0;  }completion:^(BOOL finished) {   [transitionContext completeTransition:YES];  }]; }}


動畫的時間可以從ransitionDuration:方法獲取

通過UITransitionContextToViewKeyUITransitionContextFromViewKey兩個Key分別獲取彈出和消失動畫的View(注意別混淆兩個Key)

要將做動畫的View加入到專門用于動畫的containerView

總結

以上就是這篇文章的全部內容了,這里只介紹怎樣實現轉場動畫,至于其他好玩NB的效果,大家可以自己試著實現,小編以后也會分享其他更好的效果,希望這篇文章對大家能有一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人精品福利视频| 精品久久久香蕉免费精品视频| 一本一本久久a久久精品综合小说| 69久久夜色精品国产69| 国产成人精品av| 伊人久久男人天堂| 91在线精品视频| 精品国产户外野外| 日韩中文字幕免费视频| 成人午夜一级二级三级| 91九色国产社区在线观看| 国产精品69精品一区二区三区| 欧美国产精品人人做人人爱| 国产精品扒开腿做爽爽爽的视频| 欧美一区二区三区艳史| 福利二区91精品bt7086| 国产精品video| 国产成人综合一区二区三区| 国产国产精品人在线视| 日韩激情在线视频| 亚洲第五色综合网| 78m国产成人精品视频| 亚洲高清在线观看| 亚洲激情视频在线播放| 亚洲性夜色噜噜噜7777| 亚洲丁香婷深爱综合| 国产精品久久久久久超碰| 国产精品久久久久aaaa九色| 中文.日本.精品| 亚洲精品日韩在线| 国产欧美精品一区二区三区介绍| 久久频这里精品99香蕉| 日韩视频免费中文字幕| 国产精品自产拍在线观看中文| 国产视频亚洲精品| 欧美电影在线观看高清| 日韩禁在线播放| 亚洲欧美国产精品专区久久| 欧美激情中文网| 欧洲成人性视频| 欧美老女人性视频| 欧美午夜www高清视频| 亚洲最大在线视频| 欧美一级大片视频| 成人免费高清完整版在线观看| 庆余年2免费日韩剧观看大牛| 亚洲精品电影网| 2021国产精品视频| 美女久久久久久久| 精品久久香蕉国产线看观看亚洲| 青青青国产精品一区二区| 亚洲人成亚洲人成在线观看| 精品久久久久久久久久久久久久| 久久91精品国产91久久久| 国产在线拍偷自揄拍精品| 欧美日韩性生活视频| 国产有码在线一区二区视频| 午夜精品美女自拍福到在线| 亚洲级视频在线观看免费1级| 91精品久久久久久久久青青| 久久久久国产精品免费网站| 91久久久久久国产精品| 国产综合久久久久久| 国产伦精品一区二区三区精品视频| 亚洲美女在线视频| 成人a免费视频| 在线观看视频99| 色综合久久精品亚洲国产| 国语自产偷拍精品视频偷| 欧美专区国产专区| 国产精品入口尤物| 久久免费精品日本久久中文字幕| 国产在线精品播放| 亚洲欧美日韩一区二区在线| 日韩在线视频免费观看| 国产欧美日韩91| 中国日韩欧美久久久久久久久| 亚洲天堂男人的天堂| 日韩av电影手机在线| 在线国产精品视频| 日本精品一区二区三区在线播放视频| 精品呦交小u女在线| 国语自产精品视频在线看一大j8| 亚洲国产精品女人久久久| 日本高清不卡的在线| 日韩电视剧在线观看免费网站| 亚洲人成绝费网站色www| 日韩中文字幕视频在线观看| 欧美二区在线播放| 日韩亚洲欧美中文在线| 亚洲免费成人av电影| 91欧美精品成人综合在线观看| 91在线网站视频| 国产欧美精品一区二区三区介绍| 亚洲影院高清在线| 欧美洲成人男女午夜视频| 岛国av在线不卡| 久久69精品久久久久久国产越南| 亚洲wwwav| 国内外成人免费激情在线视频网站| 亚洲春色另类小说| 亚洲人在线视频| 欧美日韩亚洲网| 久久精品视频va| 久久综合免费视频| 亚洲欧美中文日韩在线v日本| 狠狠色狠狠色综合日日五| 成人免费观看49www在线观看| 色综合天天综合网国产成人网| 91高清视频免费观看| 成人乱人伦精品视频在线观看| 国产成人综合av| 国产精品第10页| 日本中文字幕久久看| 欧洲精品久久久| 91精品久久久久久久久不口人| 一区二区三区日韩在线| 亚洲片国产一区一级在线观看| 九九热99久久久国产盗摄| 91丨九色丨国产在线| 国产视频久久久久久久| 国产成人一区二区在线| 久久99久国产精品黄毛片入口| 欧美成年人视频网站| 国产精品视频xxx| 日韩欧美在线视频免费观看| 亚洲色图激情小说| 国产精品久久久精品| 一区二区三区天堂av| 欧美一级大片在线观看| 亚洲女人天堂视频| 亚洲jizzjizz日本少妇| 欧美华人在线视频| 欧美黄色性视频| 一本大道久久加勒比香蕉| 亚洲第一网站免费视频| 51ⅴ精品国产91久久久久久| 精品爽片免费看久久| 亚洲电影免费观看高清完整版在线观看| 国产精品亚洲美女av网站| 午夜免费久久久久| 亚洲国产精品va在看黑人| 少妇av一区二区三区| 中文字幕自拍vr一区二区三区| 97视频在线观看免费| 国产精品福利观看| 国产精品久久久久免费a∨| 日本精品视频在线播放| 国产欧美精品一区二区| 欧美体内谢she精2性欧美| 国产第一区电影| 亚洲精品白浆高清久久久久久| 精品美女久久久久久免费| 中文在线不卡视频| 欧美成人在线网站| 97视频在线播放| 亚洲美女黄色片| 亚洲第一精品夜夜躁人人爽| 国产偷国产偷亚洲清高网站| 欧美成人性生活| 日韩中文字幕在线观看| 成人免费网站在线看| 欧美激情xxxx| 日韩欧美国产网站|