原文來自:個人簡書git
在平時的開發中,咱們進行界面跳轉時通常都是採用系統默認的轉場動畫(Push 和 Present),iOS7以後,蘋果開放了相關API,讓咱們能夠自定義轉場動畫,讓APP更有活力。本文將介紹個人一個開源項目一個自定義轉場動畫庫WXSTransition的使用以及部分原理,經過這個庫,一行代碼即可以實現轉場動畫,簡單易用,同時也支持多個屬性修改,能靈活擴展。github
以前寫了相關介紹的文章一行代碼實現自定義轉場動畫--iOS自定義轉場動畫集介紹第一個版本的WXSTransition,通過一段時間的優化更新,WXSTransition作了一些改變也添加了一些新的東西,如:支持手勢返回
以及新動畫效果
ide
一、動畫效果
二、使用方法優化
三、手勢返回動畫
跟以前版本相比,添加了一些新動畫,下面是部分效果圖:atom
一行代碼就能夠調用
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; }];
相比較與以前的版本,添加了startView
和targetView
兩個屬性,讓使用方法更爲統一。
全部能夠更改的屬性在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;
手勢返回是一個新加的比較重要的功能。效果圖以下:
如今支持左滑、上滑、下滑、右滑四種手勢進行返回,能夠經過backGestureType
屬性修改。
(1)、首先要經過一個實現UIViewControllerInteractiveTransitioning
協議的類----WXSPercentDrivenInteractiveTransition
來控制手勢和動畫的進度。
(2)、當手離開屏幕,手勢結束時,轉場動畫須要繼續,這個時候經過CADisplayLink來完成剩下的動畫。
具體的實現方法能夠到源碼中WXSTransition看看,後續我也會抽時間寫一篇詳細的介紹。
這個版本除了以上變化外,還進行了代碼結構的修改優化,也解決了一些Bug,例如delegate
衝突等,在這裏感謝一下熱心提Bug的同窗,之後仍是但願有更多的技術交流,有興趣的同窗能夠到 WXSTransition Clone下來看看,以爲有所幫助的同窗麻煩給個Star.