这个库为 UIViewController 提供全屏 pop 和 push 手势,并支持为每个单例控制器的 UINavigationBar 进行自定义。在执行 pop 动作时支持使用 AVPlayer 播放视频。
Objective-C:
#import <JPNavigationControllerKit.h>
JPNavigationController *nav = [[JPNavigationController alloc]initWithRootViewController:YourVc];
Objective-C:
[self.navigationController pushViewController:YourVc animated:YES];
Objective-C:
[self.navigationController popViewControllerAnimated:YES];
[self.navigationController popToRootViewControllerAnimated:YES];
// Pop to a given view controller.
// Plan A: find the target view controller by youself, then pop it.
JPNavigationControllerDemo_linkBar *vc = nil;
NSArray *viewControllers = self.navigationController.jp_rootNavigationController.jp_viewControllers;
for (UIViewController *c in viewControllers) {
if ([c isKindOfClass:[JPNavigationControllerDemo_linkBar class]]) {
vc = (JPNavigationControllerDemo_linkBar *)c;
break;
}
}
if (vc) {
[self.navigationController popToViewController:vc animated:YES];
}
// Plan B: use jp_popToViewControllerClassString:handle:animated:.
[self.navigationController jp_popToViewControllerClassString:@"JPNavigationControllerDemo_linkBar" handle:^UIViewController * _Nullable(NSArray<UIViewController *> * _Nullable viewControllers, NSError * _Nullable error) {
if (!error) {
return viewControllers.firstObject;
}
else{
NSLog(@"%@", error);
return nil;
}
} animated:YES];
Objective-C:
// Hide navigation bar.
self.navigationController.navigationBarHidden = YES;
// Customize UINavigationBar color
[self.navigationController.navigationBar setBackgroundImage:aImage forBarMetrics:UIBarMetricsDefault];
Objective-C:
// Become the delegate of JPNavigationControllerDelegate protocol and, implemented protocol method, then you own left-slip to push function.
[self.navigationController jp_registerNavigtionControllerDelegate:self];
// Implementation protocol method
- (void)navigationControllerDidPush:(JPNavigationController *)navigationController{
[self.navigationController pushViewController:YourVc animated:YES];
}
Objective-C:
// Return the link view in the be pushed viewController.
- (void)viewDidLoad{
[super viewDidLoad];
YourVc.navigationController.jp_linkViewHeight = 44.0f;
self.navigationController.jp_linkView = YourLinkView;
}
Objective-C:
self.navigationController.jp_interactivePopMaxAllowedInitialDistanceToLeftEdge = aValue;
Objective-C:
self.navigationController.jp_closePopForAllViewController = YES;
Objective-C:
self.navigationController.jp_closePopForAllViewController = YES;
Objective-C:
self.navigationController.jp_useCustomPopAnimationForCurrentViewController = YES;
在你的项目中使用 JPNavigationController 有两种方法:
CocoaPods 是 Objective-C 的依赖管理器,它自动化并简化了在项目中使用第三方库的过程。查看 入门 部分,了解更多细节。
platform :ios, '8.0'
target "YourProjectName" do
pod 'JPNavigationController', '~> 2.1.2'
end
所有源代码都是在 MIT 许可证 之下。
本框架支持为 UINavigationController 提供全屏 pop 和 push 手势,并且可以为每个控制器自定义 UINavigationBar。注意,每个控制器的 UINavigationBar 是互不干扰的。实现基于 AOP 思想,不会侵入你的项目。
AVPlayer
播放视频时,使用自定义的 pop 动画以保证 AVPlayer
流畅播放。阅读我的简书文章 [iOS]UINavigationController全屏pop之为每个控制器自定义UINavigationBar
阅读我的简书文章 [iOS]调和pop手势导致AVPlayer播放卡顿
下载我Github上的demo
Objective-C:
#import <JPNavigationControllerKit.h>
JPNavigationController *nav = [[JPNavigationController alloc]initWithRootViewController:YourVc];
Objective-C:
[self.navigationController pushViewController:YourVc animated:YES];
Objective-C:
[self.navigationController popViewControllerAnimated:YES];
[self.navigationController popToRootViewControllerAnimated:YES];
// 弹出到指定的控制器
// 方案A: 找到目标控制器, pop
JPNavigationControllerDemo_linkBar *vc = nil;
NSArray *viewControllers = self.navigationController.jp_rootNavigationController.jp_viewControllers;
for (UIViewController *c in viewControllers) {
if ([c isKindOfClass:[JPNavigationControllerDemo_linkBar class]]) {
vc = (JPNavigationControllerDemo_linkBar *)c;
break;
}
}
if (vc) {
[self.navigationController popToViewController:vc animated:YES];
}
// 方案 B: jp_popToViewControllerClassString:handle:animated:.
[self.navigationController jp_popToViewControllerClassString:@"JPNavigationControllerDemo_linkBar" handle:^UIViewController * _Nullable(NSArray<UIViewController *> * _Nullable viewControllers, NSError * _Nullable error) {
if (!error) {
return viewControllers.firstObject;
}
else{
NSLog(@"%@", error);
return nil;
}
} animated:YES];
Objective-C:
// 隐藏导航条.
self.navigationController.navigationBarHidden = YES;
// 自定义 UINavigationBar 颜色
[self.navigationController.navigationBar setBackgroundImage:aImage forBarMetrics:UIBarMetricsDefault];
Objective-C:
// 成为JPNavigationControllerDelegate协议的代理, 实现协议方法即可拥有左滑push功能.
[self.navigationController jp_registerNavigtionControllerDelegate:self];
// 实现协议方法
- (void)jp_navigationControllerDidPushLeft{
[self.navigationController pushViewController:YourVc animated:YES];
}
Objective-C:
// 你只需要在 viewDidLoad: 方法里把你的联动视图传给框架, 框架会制动帮你显示.
-(void)viewDidLoad{
[super viewDidLoad];
YourVc.navigationController.jp_linkViewHeight = 44.0f;
self.navigationController.jp_linkView = YourLinkView;
}
Objective-C:
self.navigationController.jp_interactivePopMaxAllowedInitialDistanceToLeftEdge = aValue;
Objective-C:
self.navigationController.jp_closePopForAllViewController = YES;
Objective-C:
self.navigationController.jp_closePopForAllViewController = YES;
Objective-C:
self.navigationController.jp_useCustomPopAnimationForCurrentViewController = YES;
两种选择把框架集成到你的项目
CocoaPods 是 Objective-C 的依赖管理器,它自动化并简化了在项目中使用第三方库的过程。查看 入门 部分,了解更多细节。
platform :ios, '8.0'
target "YourProjectName" do
pod 'JPNavigationController', '~> 2.1.2'
end
所有源代码都是在 MIT 许可证 之下。