一行代碼調用支持手勢返回的iOS自定義轉場動畫

原文來自:個人簡書git

前言

在平時的開發中,咱們進行界面跳轉時通常都是採用系統默認的轉場動畫(Push 和 Present),iOS7以後,蘋果開放了相關API,讓咱們能夠自定義轉場動畫,讓APP更有活力。本文將介紹個人一個開源項目一個自定義轉場動畫庫WXSTransition的使用以及部分原理,經過這個庫,一行代碼即可以實現轉場動畫,簡單易用,同時也支持多個屬性修改,能靈活擴展。github

以前寫了相關介紹的文章一行代碼實現自定義轉場動畫--iOS自定義轉場動畫集介紹第一個版本的WXSTransition,通過一段時間的優化更新,WXSTransition作了一些改變也添加了一些新的東西,如:支持手勢返回以及新動畫效果
 ide

正文

一、動畫效果
二、使用方法優化

三、手勢返回動畫

一、動畫效果

跟以前版本相比,添加了一些新動畫,下面是部分效果圖:atom

insideThenPush.gif

frgmentFromRight.gif

normalViewMove.gif

fragmentFromTop.gif

二、使用方法

一行代碼就能夠調用
Push:spa

  [self.navigationController wxs_pushViewController:[[SecondViewController alloc] init] animationType:WXSTransitionAnimationTypePageTransition];

Present:code

[self wxs_presentViewController:[[PresentViewController alloc] init] animationType:WXSTransitionAnimationTypePageTransition  completion:nil];

其中WXSTransitionAnimationTypePageTransition是動畫類型,能夠經過更改這裏選擇不一樣類型的動畫。orm

若是想要修改動畫時間等屬性能夠經過如下方法進行修改:開發

[self.navigationController wxs_pushViewController:vc makeTransition:^(WXSTransitionProperty *transition) {
                        transition.animationType =  WXSTransitionAnimationTypePointSpreadPresent;
                        transition.animationTime = 1;
                        transition.backGestureEnable = NO;
                        transition.startView = cell.contentView;
                    }];

相比較與以前的版本,添加了startViewtargetView兩個屬性,讓使用方法更爲統一。
全部能夠更改的屬性在WXSTransitionProperty中能夠看到。

/**
 *  轉場動畫時間
 *  transitiion animation time
 */
@property (nonatomic,assign) NSTimeInterval animationTime;
/**
 *  轉場方式 :push,pop,present,dismiss
 *  transitiion type :push,pop,present,dismiss
 */
@property (nonatomic,assign) WXSTransitionType transitionType;
/**
 *  轉場動畫類型 
 *  transitiion animation type
 */
@property (nonatomic,assign) WXSTransitionAnimationType animationType;

/**
 *  是否採用系統原生返回方式
 *  set YES to make back action of systerm
 */
@property (nonatomic,assign) BOOL isSysBackAnimation;

/**
 *  是否經過手勢返回
 *  set YES to enable gesture for back
 */
@property (nonatomic,assign) BOOL backGestureEnable;
/**
 *  返回上個界面的手勢 默認:右滑 :WXSGestureTypePanRight
 *  choose type of gesture for back , default : WXSGestureTypePanRight
 */
@property (nonatomic,assign) WXSGestureType backGestureType;
/**
 *  View move 等動畫中指定的起始視圖
 *
 */
@property (nonatomic, strong) UIView     *startView;
/**
 *  View move 等動畫中指定的結束視圖
 */
@property (nonatomic, strong) UIView     *targetView;

三、手勢返回

手勢返回是一個新加的比較重要的功能。效果圖以下:
gestureSpread.gif
如今支持左滑、上滑、下滑、右滑四種手勢進行返回,能夠經過backGestureType屬性修改。

原理:

(1)、首先要經過一個實現UIViewControllerInteractiveTransitioning協議的類----WXSPercentDrivenInteractiveTransition來控制手勢和動畫的進度。
(2)、當手離開屏幕,手勢結束時,轉場動畫須要繼續,這個時候經過CADisplayLink來完成剩下的動畫。

具體的實現方法能夠到源碼中WXSTransition看看,後續我也會抽時間寫一篇詳細的介紹。

後語

這個版本除了以上變化外,還進行了代碼結構的修改優化,也解決了一些Bug,例如delegate衝突等,在這裏感謝一下熱心提Bug的同窗,之後仍是但願有更多的技術交流,有興趣的同窗能夠到 WXSTransition Clone下來看看,以爲有所幫助的同窗麻煩給個Star.

相關文章
相關標籤/搜索