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

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

VCTransitionsLibrary–自定義iOS交互式轉場動畫的庫

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

簡介

VCTransitionsLibrary 提供了許多適用于入棧,出棧,模態等場景下控制器切換時的轉場動畫.它本身提供了一個定義好的轉場動畫庫,你可以拖到自己工程中直接使用;也提供了許多擁有不同轉場動畫效果”互動控制器”,你可以直接使用這些控制器來和自定義動畫效果配合使用;而不是自己控制去控制交互.

項目主頁: VCTransitionsLibrary

最新示例: 點擊下載

注意: 自定義視圖控制器的轉場動畫為iOS7 + 通過 UIViewControllerTransitioningDelegate協議, UINavigationControllerDelegate協議和 UITabBarControllerDelegate 協議提供的系統級別的支持.這個庫的意義在于定義了常用的動畫效果,并封裝了常用的交互操作,簡化了iOS交互式轉場動畫的編碼量!

快速入門

運行環境

  • iOS 7+
  • ARC

安裝

使用 CocoaPods 安裝

pod "VCTransitionsLibrary"

手動安裝

把文件 AnimationControllers 和 InteractionControllers 文件夾下所有代碼復制到工程中即可.

使用

在自定義轉場動畫時,有兩類關鍵的類:

  • 動畫控制器 –  這個類是用來實現自定義動畫的.但你聲明想要使用自定義動畫時,你應該提供一個動畫控制器.這個類會實現需要的動畫,完成時會通知框架.
  • 交互控制器 – 這個類是用來管理交互的-那些通常由某個手勢空控制的交互,允許用戶通過滑動,輕掃或執行其他操作來實現兩個視圖控制器的導航.必須指出的是,交互控制器允許導航取消,例如,一個用戶可以在正在導航至某一頁面時,突然改變主意,然后取消了操作.

注意: 動畫和交互是完全獨立的,這意味著你可以在其他任何自定義控制器上獨立使用交互控制器-很酷!

使用動畫控制器

AnimationControllers 文件夾中提供了許多可以整合進你的工程中的動畫控制器:

自定義模態控制器顯示/隱藏的動畫

UIViewControllerTransitioningDelegate 協議被用來在模態控制器顯示/隱藏時提供一個動畫控制器.當一個視圖控制器被模態顯示或隱藏時,它的transitioningDelegate屬性用來提供UIViewControllerTransitioningDelegate協議的支持.擔當代理角色的類,通過 animationControllerForPResentedController: presentingController: sourceController: 方法返回模態顯示時的動畫, 通過 animationControllerForDismissedController: 返回模態消失時的動畫即可.

自定義頂部導航的轉場動畫

UINavigationController 有一個

id<UINavigationControllerDelegate> delegate 屬性.只需要讓它的代理通過 navigationController: animationControllerForOperation: fromViewController: toViewController: 返回某個動畫效果即可.

為了同時設置出棧/入棧都合適的動畫效果(或者說,出棧/入棧時能使用相反方向的動畫),你可以參考下面代碼:

- (id<UIViewControllerAnimatedTransitioning>)navigationController:                                (UINavigationController *)navigationController   animationControllerForOperation:(UINavigationControllerOperation)operation                fromViewController:(UIViewController *)fromVC                  toViewController:(UIViewController *)toVC {    // 出棧時,要反轉動畫方向.    _animationController.reverse = operation == UINavigationControllerOperationPop;    return _animationController;}

自定義底部標簽欄導航的轉場動畫

UITabBarController 有一個 id<UITabBarControllerDelegate> delegate屬性,只需要讓它的代理通過tabBarController: animationControllerForTransitionFromViewController: toViewController:返回某個動畫效果即可.

為了給動畫一個合適的方向,你可以比較兩個視圖控制器的索引:

- (id <UIViewControllerAnimatedTransitioning>)tabBarController:(UITabBarController *)tabBarController            animationControllerForTransitionFromViewController:(UIViewController *)fromVC                                              toViewController:(UIViewController *)toVC {    NSUInteger fromVCIndex = [tabBarController.viewControllers indexOfObject:fromVC];    NSUInteger toVCIndex = [tabBarController.viewControllers indexOfObject:toVC];    _animationController.reverse = fromVCIndex < toVCIndex;    return _animationController;}

使用交互控制器

交互控制器和動畫控制器配合使用,可以實現交互式的動畫轉場效果,比如可以讓用戶通過手勢來控制頁面間的導航.交互控制器允許用戶在一個轉場動畫中前進,后退,甚至退出.

交互控制器負責給視圖添加手勢,并負責在用戶使用某個手勢時進行相應地導航操作.

模態控制器消失時的交互

UIViewControllerTransitioningDelegate 協議,也用來提供對交互式轉場的支持.下面是一個結合清掃手勢和翻頁動畫的例子:

//實例變量,通常在你的初始化方法初始化它們CEFlipAnimationController *_animationController;CESwipeInteractionController *_interactionController;- (id<UIViewControllerAnimatedTransitioning>)      animationControllerForPresentedController:(UIViewController *)presented                           presentingController:(UIViewController *)presenting                               sourceController:(UIViewController *)source {    // 允許交互控制器綁定它的手勢識別器.    [_interactionController wireToViewController:presented                                     forOperation:CEInteractionOperationDismiss];       _animationController.reverse = NO;    return _animationController;}- (id<UIViewControllerAnimatedTransitioning>)     animationControllerForDismissedController:(UIViewController *)dismissed {    _animationController.reverse = YES;    return _animationController;}- (id<UIViewControllerInteractiveTransitioning>)           interactionControllerForDismissal:                (id<UIViewControllerAnimatedTransitioning>)animator {    // 如果有交互控制器被觸發了,就直接使用它.返回nil,是為了支持用戶通過點擊某個按鈕直接返回;此時不會觸發交互控制器.    return _interactionController.interactionInProgress                ? _interactionController : nil;}

出棧時的交互

UINavigationControllerDelegate 也有方法為交互式轉場提供支持.一個典型的類似于上上面代碼的模式:

// 實例變量,通常在你的初始化方法中初始化它們.CEFlipAnimationController *_animationController;CESwipeInteractionController *_interactionController;- (id<UIViewControllerAnimatedTransitioning>)                 navigationController:(UINavigationController *)navigationController      animationControllerForOperation:(UINavigationControllerOperation)operation                   fromViewController:(UIViewController *)fromVC                     toViewController:(UIViewController *)toVC {    // 把交互控制器綁定到你的視圖控制器上.    [_interactionController wireToViewController:toVC                                    forOperation:CEInteractionOperationPop];    _animationController.reverse = operation == UINavigationControllerOperationPop;    return _animationController;}- (id <UIViewControllerInteractiveTransitioning>)                         navigationController:(UINavigationController *)navigationController   interactionControllerForAnimationController:(id <UIViewControllerAnimatedTransitioning>)animationController {    //如果有交互控制器被觸發了,就直接使用它.返回nil,是為了支持用戶通過點擊某個按鈕直接返回;此時不會觸發交互控制器.     return _interactionController.interactionInProgress                ? _interactionController : nil;}

用于標簽欄控制器切換時的交互

UITabBarControllerDelegate 協議也為交互式轉場提供了支持.但是由于代理方法在首次初始化時不被執行,所有需要其他方式來綁定交互控制器,如KVO:

@implementation TabBarViewController {    CEFoldAnimationController *_animationController;    CESwipeInteractionController *_swipeInteractionController;}- (id)initWithCoder:(NSCoder *)aDecoder {    if (self = [super initWithCoder:aDecoder]) {        self.delegate = self;        // 創建交互/動畫控制器.        _swipeInteractionController = [CESwipeInteractionController new];        _animationController = [CEFoldAnimationController new];        _animationController.folds = 3;        // 使用觀察者模式監測被選中的選擇器的變化情況.        [self addObserver:self               forKeyPath:@"selectedViewController"                  options:NSKeyValueObservingOptionNew                  context:nil];    }    return self;}- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object                        change:(NSDictionary *)change                       context:(void *)context{    if ([keyPath isEqualToString:@"selectedViewController"] )    {        // 把交互控制器綁定到視圖控制器上.        [_swipeInteractionController wireToViewController:self.selectedViewController                                             forOperation:CEInteractionOperationTab];    }}- (id <UIViewControllerAnimatedTransitioning>)tabBarController:(UITabBarController *)tabBarController            animationControllerForTransitionFromViewController:(UIViewController *)fromVC                                              toViewController:(UIViewController *)toVC {    NSUInteger fromVCIndex = [tabBarController.viewControllers indexOfObject:fromVC];    NSUInteger toVCIndex = [tabBarController.viewControllers indexOfObject:toVC];    _animationController.reverse = fromVCIndex < toVCIndex;    return _animationController;}-(id<UIViewControllerInteractiveTransitioning>)tabBarController:(UITabBarController *)tabBarController interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransitioning>)animationController{    return _swipeInteractionController.interactionInProgress ? _swipeInteractionController : nil;}@end

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
www.欧美视频| 国产精品视频一区国模私拍| 欧美与黑人午夜性猛交久久久| 日韩国产欧美精品一区二区三区| 国产精品日韩欧美| 亚洲国产精品嫩草影院久久| 欧美国产精品va在线观看| 久久琪琪电影院| 久久精品福利视频| 欧美精品videosex极品1| 亚洲欧美日韩直播| 欧美大片网站在线观看| 亚洲成人黄色网址| 最近2019中文字幕在线高清| 日韩成人在线网站| 欧美成人午夜剧场免费观看| 久久国产视频网站| 亚洲男人的天堂网站| 欧美自拍大量在线观看| 国产精品444| 色与欲影视天天看综合网| 亚洲成人在线视频播放| 久久色精品视频| 亚洲国产一区二区三区在线观看| 欧美裸体xxxx极品少妇| 欧美在线播放视频| 久久免费观看视频| 欧美极品少妇xxxxⅹ喷水| 久久综合国产精品台湾中文娱乐网| 韩国美女主播一区| 日韩在线资源网| 亚洲三级黄色在线观看| 亚洲va国产va天堂va久久| 欧美国产高跟鞋裸体秀xxxhd| 欧美激情精品在线| 久久久精品亚洲| 国产一区二区三区在线观看网站| 久久久综合免费视频| 国a精品视频大全| 日韩在线观看免费网站| 亚洲精品视频久久| 日韩一区在线视频| 久久久久999| 国产精品久久久久久婷婷天堂| 亚洲精品第一国产综合精品| 在线观看欧美日韩国产| 亚洲黄色片网站| 久久高清视频免费| 成人欧美一区二区三区黑人| 国产精品高潮在线| 国产欧美精品在线播放| 中文字幕国产亚洲2019| 久久久久久久久国产| 欧美日本高清视频| 国产精品揄拍一区二区| 在线视频欧美性高潮| 国产噜噜噜噜久久久久久久久| 国产亚洲精品久久久久久| 国产99视频在线观看| 亚洲成人网久久久| 伊人久久久久久久久久久| 视频在线一区二区| 欧美日韩xxx| 国产精品视频区| 欧美刺激性大交免费视频| 国产精品久久久久久影视| 国产精品永久免费| 91po在线观看91精品国产性色| 欧美在线一级视频| 欧美极度另类性三渗透| 全球成人中文在线| 黄色成人av网| 色视频www在线播放国产成人| 欧美专区在线播放| 国产亚洲福利一区| 中文字幕亚洲二区| 国产成+人+综合+亚洲欧洲| 亚洲黄色成人网| 国产欧美精品一区二区三区-老狼| 国产99在线|中文| 亚洲国产日韩一区| 色先锋久久影院av| 国产成人自拍视频在线观看| 国产91精品不卡视频| 538国产精品一区二区免费视频| 亚洲国产美女精品久久久久∴| 91在线国产电影| 亚洲成人激情小说| 国产精品久久久久久亚洲调教| 国产精品普通话| 国产精品视频26uuu| 精品久久久香蕉免费精品视频| 成人妇女淫片aaaa视频| 久久精品国产免费观看| 日韩av网站大全| 亚洲在线免费观看| 亚洲成人xxx| 中文字幕久热精品在线视频| 精品精品国产国产自在线| 欧美视频一二三| 欧美资源在线观看| 欧美亚洲在线视频| 按摩亚洲人久久| 欧美成人亚洲成人日韩成人| www.日韩免费| 一本一本久久a久久精品牛牛影视| 欧美激情视频免费观看| 日韩av手机在线观看| 亚洲色图在线观看| 日韩精品在线视频| 欧美在线观看网站| 亚洲成年人影院在线| 热久久99这里有精品| 中文字幕国产日韩| 欧美精品九九久久| 色婷婷综合久久久久中文字幕1| 国产精品视频久久久久| 日韩理论片久久| 色哟哟亚洲精品一区二区| 欧美精品在线极品| 成人精品网站在线观看| 亚洲综合在线中文字幕| 欧美日韩国产一区二区| 国产成人中文字幕| 日韩欧美国产免费播放| 按摩亚洲人久久| 久久精品99久久久香蕉| 亚洲白拍色综合图区| 热99精品里视频精品| 精品人伦一区二区三区蜜桃免费| 亚洲国产精品嫩草影院久久| 国产精品私拍pans大尺度在线| 亚洲va电影大全| 久久精品视频播放| 国产成人福利视频| 成人免费看片视频| 欧美怡红院视频一区二区三区| 久久精品中文字幕免费mv| 亚洲色图av在线| 国产精品日日摸夜夜添夜夜av| 2019中文字幕免费视频| 欧美日韩国产一区中文午夜| 午夜精品蜜臀一区二区三区免费| 欧美在线视频a| 久久99国产精品久久久久久久久| 国产欧美 在线欧美| 精品人伦一区二区三区蜜桃免费| 国产精品激情自拍| 成人国内精品久久久久一区| 一区二区福利视频| 欧美激情综合色| 国产亚洲精品91在线| 日韩免费av一区二区| 97久久超碰福利国产精品…| 欧美黄色成人网| 亚洲综合中文字幕在线观看| 国产日韩欧美在线视频观看| 亚洲电影中文字幕| 91国在线精品国内播放| 国产精品久久久久久久久久ktv| 日韩精品视频免费专区在线播放| 中文字幕日韩在线观看| 欧美日韩国产在线看| 中文字幕日韩在线观看|