国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

【翻譯】自定義UIViewControllerTransitions

2019-11-14 20:39:29
字體:
供稿:網(wǎng)友

  原文地址:http://www.shinobicontrols.com/blog/posts/2013/10/03/ios7-day-by-day-day-10-custom-uiviewcontroller-transitions

  iOS7中引入了控制器間的切換切換動畫,適用于UINavigationController棧內(nèi)核modal顯示

  iOS7 介紹了兩種切換方式,一種是自動切換,另一種是交互式切換。下面就介紹一下NavigationController中實現(xiàn)fade動畫切換。

  源碼地址:下載源碼

 

Navigation Controller Delegate

  在動畫的世界里面充滿了協(xié)議,然而現(xiàn)在這個項目中創(chuàng)建一個我們想要看見的視圖,添加的協(xié)議需要交互式切換和模態(tài)視圖的展現(xiàn)。

  UINavigationControllerDelegate協(xié)議提供了4個新方法,用來決定自定義動畫的切換。

  我們感興趣的方法是:

  

- (id<UIViewControllerAnimatedTransitioning>)navigationController:                                  animationControllerForOperation:                                               fromViewController:                                                 toViewController:

這個方法將會在導(dǎo)航控制器切換過度的時候調(diào)用(同樣適用于storyboard適用segue的過度),所以我們可以決定返回哪種類型的切換。

 

我們創(chuàng)建一個類作為NavigationController的delegate

@interface SCNavControllerDelegate : NSObject <UINavigationControllerDelegate>@end

 

實現(xiàn)方法是:

@implementation SCNavControllerDelegate    - (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController                                      animationControllerForOperation:(UINavigationControllerOperation)operation                                                   fromViewController:(UIViewController *)fromVC                                                     toViewController:(UIViewController *)toVC    {        return [SCFadeTransition new];    }@end

我們想要所有的切換都是相同的,不管是進入還是返回,所以我們返回的是SCFadeTransition對象給每一次切換。

 

設(shè)置代理是非常見到你的,你可以在項目里面看見:

- (id)initWithCoder:(NSCoder *)aDecoder{    self = [super initWithCoder:aDecoder];    if(self) {        _navDelegate = [SCNavControllerDelegate new];        self.delegate = _navDelegate;    }    return self;}

 _navDelegate  是一個ivar類型id<UINavigationControllerDelegate>.

 

創(chuàng)建自定義變換

我們看見這個代理需要返回一些切換對象,也就是返回一個遵循UIViewControllerAnimatedTransitioning協(xié)議的對象,這個協(xié)議中有三個方法,其中兩個是必須要實現(xiàn)的。

transitionDuration:(必須實現(xiàn))。返回動畫的持續(xù)時間

animateTransition:(必須實現(xiàn))在控制器間實現(xiàn)動畫的過度。提供一個我們需要的對象用來聯(lián)系不同的組件

animationEnded:(選擇實現(xiàn))這個會在動畫完成之后調(diào)用,可以在動畫完成之后觸發(fā)一些方法。

 

我們定義一個SCFadeTransition類來實現(xiàn)這兩個方法

@interface SCFadeTransition : NSObject <UIViewControllerAnimatedTransitioning>@end

實現(xiàn)方法如下

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

animateTransition:方法調(diào)用的時候提供一個遵循UIViewControllerContextTransitioning協(xié)議的對象,這個對象用來獲取動畫完成的點點滴滴。第一個方法我們用 viewControllerForKey:,讓我們能夠掌握兩個視圖控制器間的過度。

// Get the two view controllersUIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

這個內(nèi)容提供給我們一個UIView的動畫,通過containerView方法聯(lián)系

// Get the container view - where the animation has to happenUIView *containerView = [transitionContext containerView];

我們必須聯(lián)系每一個視圖控制器的子視圖

// Add the two VC views to the container[containerView addSubview:fromVC.view];[containerView addSubview:toVC.view];

我們不想看見過度的視圖,所以我們必須把alpha屬性設(shè)置為0:

toVC.view.alpha = 0.0;

現(xiàn)在我們已經(jīng)提供了一個動畫,在控制器間切換有個簡單的fade效果,我們可以用UIView animation block:

[UIView animateWithDuration:[self transitionDuration:transitionContext]                      delay:0                    options:0                 animations:^{                     toVC.view.alpha = 1.f;                 }                 completion:^(BOOL finished) {                     // Let's get rid of the old VC view                     [fromVC.view removeFromSuperview];                     // And then we need to tell the context that we're done                     [transitionContext completeTransition:YES];                 }];

 

知識點:

1、設(shè)置一個動畫的持續(xù)時間,實現(xiàn)transitionDuration

2、"from"視圖控制器的視圖需要removed從view的層級中,當動畫完成的時候。

3、completeTransition:方法在切換內(nèi)容需要的時候調(diào)用,當動畫完成的時候。

 

 

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 西林县| 靖江市| 凉城县| 手游| 舞钢市| 文登市| 鸡东县| 集贤县| 合作市| 长泰县| 托里县| 巢湖市| 万宁市| 保山市| 左云县| 乌兰察布市| 伊吾县| 诏安县| 西安市| 碌曲县| 佛山市| 沅江市| 聊城市| 凌云县| 阿克苏市| 定陶县| 石泉县| 阳东县| 鄂尔多斯市| 镇江市| 玉环县| 莱西市| 苍溪县| 麻栗坡县| 扎鲁特旗| 阜新市| 临武县| 武威市| 平乐县| 尼木县| 屯留县|