iOS7推出了新的轉(zhuǎn)場(chǎng)動(dòng)畫API,以協(xié)id<UIViewControllerInterativeTransition>狐胎、id<UIViewAnimatedTransitioning>方式開放給開發(fā)者涯鲁。但是由于其復(fù)雜的API及繁瑣的實(shí)現(xiàn)方式巷查,使眾多的開發(fā)者望而止步。
這里我封裝了幾種常見的轉(zhuǎn)場(chǎng)動(dòng)畫抹腿,簡(jiǎn)化的使用方式吮便,可以直接用cocoapod搜索
WTKTransitionAnimate
,導(dǎo)入即可.使用方法
導(dǎo)入#import <WTKTransition.h>
self.navigationController.delegate = [WTKTransition shareManager];
[WTKTransition shareManager].animationType = WTKAnimateTypeKuGou;
只需要把navigationController的代理設(shè)置為WTKTransition的單例對(duì)象即可,animationType為動(dòng)畫類型幢踏,如下
typedef NS_ENUM(NSInteger,WTKAnimateType)
{
WTKAnimateTypeDefault = 0,
/// 兩個(gè)導(dǎo)航欄不一致
WTKAnimateTypeDiffNavi,
///仿酷狗
WTKAnimateTypeKuGou,
///圓形遮罩
WTKAnimateTypeRound,
///橢圓遮罩
WTKAnimateTypeOval,
///仿斗魚
WTKAnimateTypeDouYu,
};
實(shí)現(xiàn)過程
在單例對(duì)象實(shí)現(xiàn)了轉(zhuǎn)場(chǎng)動(dòng)畫的兩個(gè)代理方法髓需,使用工廠模式根據(jù)animateType創(chuàng)建子類,在子類中實(shí)現(xiàn)具體的動(dòng)畫房蝉。動(dòng)畫的可交互屬性則是通過UIPercentDrivenInteractiveTransition來實(shí)現(xiàn)僚匆,需要在viewController.view上面添加拖動(dòng)手勢(shì),根據(jù)手勢(shì)來改變UIPercentDrivenInteractiveTransition的動(dòng)畫狀態(tài)搭幻,一般的都是在父類的viewController添加手勢(shì)咧擂,這里為了簡(jiǎn)化使用,使用類別實(shí)現(xiàn)檀蹋,利用runtime給viewController關(guān)聯(lián)屬性松申,并且攔截viewDidload方法,在viewDidLoad中添加返回手勢(shì)
WTKAnimateTypeRound
這個(gè)動(dòng)畫俯逾,圓心每次都在點(diǎn)擊的坐標(biāo)贸桶,實(shí)現(xiàn)方式為獲取每次點(diǎn)擊的坐標(biāo),然后把這個(gè)坐標(biāo)設(shè)置為下次push的圓心桌肴。獲取坐標(biāo)方式有兩種
- 1皇筛、繼承Appdelegate,然后實(shí)現(xiàn)Appdelegate的sendEvent方法坠七,通過Event獲取坐標(biāo)水醋。
- 2旗笔、使用類別,通過runtime攔截sendEvent方法拄踪,然后通過Event獲取坐標(biāo)蝇恶。
為了簡(jiǎn)化WTKTransitionAnimation的使用方法,這里通過類別來實(shí)現(xiàn)惶桐。
另外艘包,當(dāng)側(cè)滑返回取消時(shí),會(huì)發(fā)送一個(gè)通知WTK_CANCEL_POP
代碼連接git連接
自定義轉(zhuǎn)場(chǎng)動(dòng)畫具體實(shí)現(xiàn)自定義轉(zhuǎn)場(chǎng)動(dòng)畫