先來(lái)看一下效果
iOS7推出了新的轉(zhuǎn)場(chǎng)動(dòng)畫(huà)API,以協(xié)id<UIViewControllerInterativeTransition>、
id<UIViewAnimatedTransitioning>方式開(kāi)放給開(kāi)發(fā)者。
但是由于其復(fù)雜的API及繁瑣的實(shí)現(xiàn)方式聋溜,使眾多的開(kāi)發(fā)者望而止步叭爱。
這里我封裝了幾種常見(jiàn)的轉(zhuǎn)場(chǎng)動(dòng)畫(huà),簡(jiǎn)化的使用方式买雾。
使用方法
下載Demo把曼,把
JHTransition
文件拖到工程里面
導(dǎo)入#import "JHTransition.h"
self.navigationController.delegate = [JHTransition shareManager];
[JHTransition shareManager].animationType = JHAnimateTypeDiffNavi;
只需要把navigationController的代理設(shè)置為WTKTransition的單例對(duì)象即可,animationType為動(dòng)畫(huà)類型嗤军,如下:
typedef NS_ENUM(NSInteger,JHAnimateType)
{
JHAnimateTypeDefault = 0,
/// 兩個(gè)導(dǎo)航欄不一致
JHAnimateTypeDiffNavi,
///仿酷狗
JHAnimateTypeKuGou,
///圓形遮罩
JHAnimateTypeRound,
///橢圓遮罩
JHAnimateTypeOval,
///仿斗魚(yú)
JHAnimateTypeDouYu,
};
實(shí)現(xiàn)過(guò)程
在單例對(duì)象實(shí)現(xiàn)了轉(zhuǎn)場(chǎng)動(dòng)畫(huà)的兩個(gè)代理方法,使用工廠模式
根據(jù)animateType創(chuàng)建子類型雳,在子類中實(shí)現(xiàn)具體的動(dòng)畫(huà)当凡。
動(dòng)畫(huà)的可交互屬性則是通過(guò)UIPercentDrivenInteractiveTransition來(lái)實(shí)現(xiàn)山害,
需要在 viewController.view上面添加拖動(dòng)手勢(shì)纠俭,
根據(jù)手勢(shì)來(lái)改變UIPercentDrivenInteractiveTransition的動(dòng)畫(huà)狀態(tài),
一般的都是在父類的viewController添加手勢(shì)浪慌,這里為了簡(jiǎn)化使用冤荆,使用類別實(shí)現(xiàn),
利用runtime給viewController關(guān)聯(lián)屬性权纤,并且攔截viewDidload方法钓简,
在viewDidLoad中添加返回手勢(shì)
JHAnimateTypeRound這個(gè)動(dòng)畫(huà),圓心每次都在點(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方法,通過(guò)Event獲取坐標(biāo)槽唾。
2丧枪、使用類別,通過(guò)runtime攔截sendEvent方法庞萍,然后通過(guò)Event獲取坐標(biāo)拧烦。
為了簡(jiǎn)化JHTransitionAnimation的使用方法,這里通過(guò)類別來(lái)實(shí)現(xiàn)钝计。
另外恋博,當(dāng)側(cè)滑返回取消時(shí),會(huì)發(fā)送一個(gè)通知 JH_CANCEL_POP