我們總以為只能使用內建的導覽動畫,這個功能也就是要進入下一頁面時會出現的行為,從右往左推進來是iOS一直以來預設動畫,而回上一頁則是從左往右推回去。

現在我們想要呈現不一樣的效果,此時就要客製化導覽動畫 (Customize Navigation Animation)。
經過高手同事阿宅的指導,我們可使用Category來實現,之後只要引用.h和.m這兩個檔案到專案中,呼叫我們自己做的推往下一頁和拉回上一頁方法即可!
/**
Theme: Customize Navigation Animation
IDE: Xcode 7
Language: Objective C
Date: 105/03/19
Author: HappyMan
Blog: https://cg2010studio.wordpress.com/
*/
// UINavigationControllerFade.h
#import <UIKit/UIKit.h>
@interface UINavigationController (Fade)
- (void)pushFadeViewController:(UIViewController *)viewController;
- (void)fadePopViewController;
@end
// UINavigationControllerFade.m
#import "UINavigationControllerFade.h"
@implementation UINavigationController (Fade)
- (void)pushFadeViewController:(UIViewController *)viewController
{
CATransition *transition = [CATransition animation];
transition.duration = 0.3f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
[transition setType:kCATransitionMoveIn];
[transition setSubtype:kCATransitionFromRight];
[self.view.layer addAnimation:transition forKey:nil];
[self pushViewController:viewController animated:NO];
}
- (void)fadePopViewController
{
CATransition *transition = [CATransition animation];
transition.duration = 0.3f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
[transition setType:kCATransitionMoveIn];
[transition setSubtype:kCATransitionFromLeft];
[self.view.layer addAnimation:transition forKey:nil];
[self popViewControllerAnimated:NO];
}
可見到上述程式碼用到轉場功能,我們可以設定TransitionFromRight或TransitionFromLeft,還能控制動畫的時間,最後呼叫預設的push或pop,將Animated設為NO,即能呈現我們想要的轉場動畫囉~
如果兩頁面要共用同一個背景,可先把背景圖貼到appdelegate的window上,接著讓這兩頁的view的背景都設成透明,再呼叫剛才的程式碼,就能看到我們期待的效果嚕!
註:
程式碼同步到我的GitHub:Customize Navigation Animation。
隨意留個言吧:)~