前言
在使用支付宝发红包时无意间注意到支付宝的发红包页面与选择联系人页面来回切换的时候导航栏有一个过渡的动画,觉得体验挺不错的
以下是支付宝截图
为了实现该功能,google了好久才找到两篇相关的文章,RainbowNavigation和HHNavigationController,仔细看了下RainbowNavigation是我需要的效果,果断看其源码,RainbowNavigation由于是用swift写的,小弟swift属于小学水平,看起来还是有些费劲的,研究了一下后,尝试着写了份Object-C版的,其中核心就是自定义push和pop动画,以下为使用规则
使用规则
将NavigationAnimate文件夹导入到工程中
demo中是在自定义导航控制器中写的
#import "GJWNavigation.h"
@interface BaseNavigationController ()
@property (nonatomic, strong) GJWNavigation *navigation;
@end
@implementation BaseNavigationController
- (void)viewDidLoad {
[super viewDidLoad];
// 在根视图控制器中初始化一次即可, 注意:要设置为成员属性,否则不起作用
// 将UINavigationController传进去即可
GJWNavigation *navigation = [[GJWNavigation alloc] init];
navigation.progressFinished = 0.5;
[navigation joinToNavigationController:self];
self.navigation = navigation;
}
@end
注意事项
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
self.title = @"Second Controller";
/*
特别注意:
当该页面的导航颜色为透明色时,要设置 self.edgesForExtendedLayout = UIRectEdgeAll;
与该页面的相邻的页面的edgesForExtendedLayout != UIRectEdgeNone
也就是说当导航透明的时候,我们要保证view的(x,y)坐标是从(0,0)位置开始的,而不是以(0.64)开始的
*/
self.edgesForExtendedLayout = UIRectEdgeAll;
}
// 设置从其他页面到该页面的导航颜色
- (UIColor *)navigationBarInColor {
return [UIColor clearColor];
// return [UIColor colorWithRed:0.972 green:0.394 blue:0.294 alpha:1.000];
// return [UIColor colorWithRed:0.018 green:0.028 blue:0.023 alpha:0.777];
}
以下为效果图
感谢
在此感谢DanisFabric的帮助