前言
在平時的開發(fā)中省撑,我們進行界面跳轉(zhuǎn)時一般都是采用系統(tǒng)默認(rèn)的轉(zhuǎn)場動畫(Push 和 Present),iOS7之后,蘋果開放了相關(guān)API,讓我們可以自定義轉(zhuǎn)場動畫翰铡,讓APP更有活力饵溅。本文將介紹我的一個開源項目一個自定義轉(zhuǎn)場動畫庫WXSTransition的使用以及部分原理妨退,通過這個庫,一行代碼便可以實現(xiàn)轉(zhuǎn)場動畫蜕企,簡單易用咬荷,同時也支持多個屬性修改,能靈活擴展轻掩。
之前寫了相關(guān)介紹的文章一行代碼實現(xiàn)自定義轉(zhuǎn)場動畫--iOS自定義轉(zhuǎn)場動畫集介紹第一個版本的WXSTransition幸乒,經(jīng)過一段時間的優(yōu)化更新,WXSTransition做了一些改變也添加了一些新的東西,如:支持手勢返回以及新動畫效果
正文
1唇牧、動畫效果
2罕扎、使用方法
3、手勢返回
1丐重、動畫效果
跟之前版本相比腔召,添加了一些新動畫,下面是部分效果圖:
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是動畫類型宴咧,可以通過更改這里選擇不同類型的動畫。
如果想要修改動畫時間等屬性可以通過以下方法進行修改:
[self.navigationController wxs_pushViewController:vc makeTransition:^(WXSTransitionProperty *transition) {
transition.animationType =? WXSTransitionAnimationTypePointSpreadPresent;
transition.animationTime = 1;
transition.backGestureEnable = NO;
transition.startView = cell.contentView;
}];
相比較與之前的版本径缅,添加了startView和targetView兩個屬性掺栅,讓使用方法更為統(tǒng)一烙肺。
所有可以更改的屬性在WXSTransitionProperty中可以看到。
/**
*? 轉(zhuǎn)場動畫時間
*? transitiion animation time
*/@property (nonatomic,assign) NSTimeInterval animationTime;/**
*? 轉(zhuǎn)場方式 :push,pop,present,dismiss
*? transitiion type :push,pop,present,dismiss
*/@property (nonatomic,assign) WXSTransitionType transitionType;/**
*? 轉(zhuǎn)場動畫類型
*? transitiion animation type
*/@property (nonatomic,assign) WXSTransitionAnimationType animationType;/**
*? 是否采用系統(tǒng)原生返回方式
*? 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;/**
*? 返回上個界面的手勢 默認(rèn):右滑 :WXSGestureTypePanRight
*? choose type of gesture for back , default : WXSGestureTypePanRight
*/@property (nonatomic,assign) WXSGestureType backGestureType;/**
*? View move 等動畫中指定的起始視圖
*
*/@property (nonatomic, strong) UIView? ? *startView;/**
*? View move 等動畫中指定的結(jié)束視圖
*/@property (nonatomic, strong) UIView? ? *targetView;
3氧卧、手勢返回
手勢返回是一個新加的比較重要的功能桃笙。效果圖如下:
現(xiàn)在支持左滑、上滑沙绝、下滑搏明、右滑四種手勢進行返回,可以通過backGestureType屬性修改闪檬。
原理:
(1)星著、首先要通過一個實現(xiàn)UIViewControllerInteractiveTransitioning協(xié)議的類----WXSPercentDrivenInteractiveTransition來控制手勢和動畫的進度。
(2)粗悯、當(dāng)手離開屏幕虚循,手勢結(jié)束時,轉(zhuǎn)場動畫需要繼續(xù)样傍,這個時候通過CADisplayLink來完成剩下的動畫横缔。
具體的實現(xiàn)方法可以到源碼中WXSTransition看看,后續(xù)我也會抽時間寫一篇詳細(xì)的介紹衫哥。
后語
這個版本除了以上變化外茎刚,還進行了代碼結(jié)構(gòu)的修改優(yōu)化,也解決了一些Bug撤逢,例如delegate沖突等膛锭,在這里感謝一下熱心提Bug的同學(xué),以后還是希望有更多的技術(shù)交流蚊荣,有興趣的同學(xué)可以到WXSTransitionClone下來看看泉沾,覺得有所幫助的同學(xué)麻煩給個Star.