前言
在平時(shí)的開(kāi)發(fā)中,我們進(jìn)行界面跳轉(zhuǎn)時(shí)一般都是采用系統(tǒng)默認(rèn)的轉(zhuǎn)場(chǎng)動(dòng)畫(huà)(Push 和 Present),iOS7之后,蘋(píng)果開(kāi)放了相關(guān)API,讓我們可以自定義轉(zhuǎn)場(chǎng)動(dòng)畫(huà),讓APP更有活力肉渴。本文將介紹我的一個(gè)開(kāi)源項(xiàng)目一個(gè)自定義轉(zhuǎn)場(chǎng)動(dòng)畫(huà)庫(kù)WXSTransition的使用以及部分原理,通過(guò)這個(gè)庫(kù)带射,一行代碼便可以實(shí)現(xiàn)轉(zhuǎn)場(chǎng)動(dòng)畫(huà)同规,簡(jiǎn)單易用,同時(shí)也支持多個(gè)屬性修改,能靈活擴(kuò)展券勺。
之前寫(xiě)了相關(guān)介紹的文章一行代碼實(shí)現(xiàn)自定義轉(zhuǎn)場(chǎng)動(dòng)畫(huà)--iOS自定義轉(zhuǎn)場(chǎng)動(dòng)畫(huà)集介紹第一個(gè)版本的WXSTransition绪钥,經(jīng)過(guò)一段時(shí)間的優(yōu)化更新,WXSTransition做了一些改變也添加了一些新的東西,如:支持手勢(shì)返回
以及新動(dòng)畫(huà)效果
正文
1关炼、動(dòng)畫(huà)效果
2程腹、使用方法
3、手勢(shì)返回
1儒拂、動(dòng)畫(huà)效果
跟之前版本相比寸潦,添加了一些新動(dòng)畫(huà),下面是部分效果圖:
2社痛、使用方法
一行代碼就可以調(diào)用
Push:
[self.navigationController wxs_pushViewController:[[SecondViewController alloc] init] animationType:WXSTransitionAnimationTypePageTransition];
Present:
[self wxs_presentViewController:[[PresentViewController alloc] init] animationType:WXSTransitionAnimationTypePageTransition completion:nil];
其中WXSTransitionAnimationTypePageTransition
是動(dòng)畫(huà)類型见转,可以通過(guò)更改這里選擇不同類型的動(dòng)畫(huà)。
如果想要修改動(dòng)畫(huà)時(shí)間等屬性可以通過(guò)以下方法進(jìn)行修改:
[self.navigationController wxs_pushViewController:vc makeTransition:^(WXSTransitionProperty *transition) {
transition.animationType = WXSTransitionAnimationTypePointSpreadPresent;
transition.animationTime = 1;
transition.backGestureEnable = NO;
transition.startView = cell.contentView;
}];
相比較與之前的版本褥影,添加了startView
和targetView
兩個(gè)屬性池户,讓使用方法更為統(tǒng)一咏雌。
所有可以更改的屬性在WXSTransitionProperty
中可以看到凡怎。
/**
* 轉(zhuǎn)場(chǎng)動(dòng)畫(huà)時(shí)間
* transitiion animation time
*/
@property (nonatomic,assign) NSTimeInterval animationTime;
/**
* 轉(zhuǎn)場(chǎng)方式 :push,pop,present,dismiss
* transitiion type :push,pop,present,dismiss
*/
@property (nonatomic,assign) WXSTransitionType transitionType;
/**
* 轉(zhuǎn)場(chǎng)動(dòng)畫(huà)類型
* transitiion animation type
*/
@property (nonatomic,assign) WXSTransitionAnimationType animationType;
/**
* 是否采用系統(tǒng)原生返回方式
* set YES to make back action of systerm
*/
@property (nonatomic,assign) BOOL isSysBackAnimation;
/**
* 是否通過(guò)手勢(shì)返回
* set YES to enable gesture for back
*/
@property (nonatomic,assign) BOOL backGestureEnable;
/**
* 返回上個(gè)界面的手勢(shì) 默認(rèn):右滑 :WXSGestureTypePanRight
* choose type of gesture for back , default : WXSGestureTypePanRight
*/
@property (nonatomic,assign) WXSGestureType backGestureType;
/**
* View move 等動(dòng)畫(huà)中指定的起始視圖
*
*/
@property (nonatomic, strong) UIView *startView;
/**
* View move 等動(dòng)畫(huà)中指定的結(jié)束視圖
*/
@property (nonatomic, strong) UIView *targetView;
3、手勢(shì)返回
手勢(shì)返回是一個(gè)新加的比較重要的功能赊抖。效果圖如下:
現(xiàn)在支持左滑统倒、上滑、下滑氛雪、右滑四種手勢(shì)進(jìn)行返回房匆,可以通過(guò)
backGestureType
屬性修改。
原理:
(1)报亩、首先要通過(guò)一個(gè)實(shí)現(xiàn)UIViewControllerInteractiveTransitioning
協(xié)議的類----WXSPercentDrivenInteractiveTransition
來(lái)控制手勢(shì)和動(dòng)畫(huà)的進(jìn)度浴鸿。
(2)、當(dāng)手離開(kāi)屏幕弦追,手勢(shì)結(jié)束時(shí)岳链,轉(zhuǎn)場(chǎng)動(dòng)畫(huà)需要繼續(xù),這個(gè)時(shí)候通過(guò)CADisplayLink來(lái)完成剩下的動(dòng)畫(huà)劲件。
具體的實(shí)現(xiàn)方法可以到源碼中WXSTransition看看掸哑,后續(xù)我也會(huì)抽時(shí)間寫(xiě)一篇詳細(xì)的介紹。
后語(yǔ)
這個(gè)版本除了以上變化外零远,還進(jìn)行了代碼結(jié)構(gòu)的修改優(yōu)化苗分,也解決了一些Bug,例如delegate
沖突等牵辣,在這里感謝一下熱心提Bug的同學(xué)摔癣,以后還是希望有更多的技術(shù)交流,有興趣的同學(xué)可以到 WXSTransition Clone下來(lái)看看,覺(jué)得有所幫助的同學(xué)麻煩給個(gè)Star.