Skip to content

dito010/JPNavigationController

Repository files navigation

license pod pod pod pod

This library provides an fullScreen pop and push gesture for UINavigationController with customize UINavigationBar for each single support and, smooth playing video use AVPlayer when perform pop gesture support.

Features

  • FullScreen pop gesture support
  • FullScreen push gesture support
  • Customize UINavigationBar for each single viewController support
  • Add link view hovering in screen bottom support
  • Customize pop and push gesture distance on the left side of the screen support
  • Close pop gesture for single viewController support
  • Close pop gesture for all viewController support
  • Smooth playing video use AVPlayer when perform pop gesture support

Requirements

  • iOS 8.0 or later
  • Xcode 8.0 or later

Getting Started

Communication

  • If you found a bug, open an issue.
  • If you have a feature request, open an issue.
  • If you want to contribute, submit a pull request.

Installation

How To Use

Initialize

Objective-C:

#import <JPNavigationControllerKit.h>

JPNavigationController *nav = [[JPNavigationController alloc]initWithRootViewController:YourVc];

PushViewController

Objective-C:

[self.navigationController pushViewController:YourVc animated:YES];

PopToViewController

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_popToViewControllerWithClass:[JPNavigationControllerDemo_linkBar class] handler:^UIViewController * _Nullable(NSArray<UIViewController *> * _Nullable viewControllers, NSError * _Nullable error) {
        
        if (!error) {
            return viewControllers.firstObject;
        }
        else{
            NSLog(@"%@", error);
            return nil;
        }
        
    } animated:YES];

Custom UINavigationBar

Objective-C:

// Hide navigation bar.
self.navigationController.navigationBarHidden = YES;

// Customize UINavigationBar color
[self.navigationController.navigationBar setBackgroundImage:aImage forBarMetrics:UIBarMetricsDefault];

Add push gesture connect viewController

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];
}

Add link view hovering in screen bottom

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;
}

Customize pop gesture distance

Objective-C:

self.navigationController.jp_interactivePopMaxAllowedInitialDistanceToLeftEdge = aValue;

Close pop gesture for single viewController

Objective-C:

self.navigationController.jp_closePopForAllViewController = YES;

Close pop gesture for all viewController

Objective-C:

self.navigationController.jp_closePopForAllViewController = YES;

Use custom pop animation when contain AVPlayer

Objective-C:

self.navigationController.jp_useCustomPopAnimationForCurrentViewController = YES;

Installation

There are two ways to use JPNavigationController in your project:

  • using CocoaPods
  • by cloning the project into your repository

Installation with CocoaPods

CocoaPods is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries in your projects. See the Get Started section for more details.

Podfile

platform :ios, '8.0'
target "YourProjectName" do
pod 'JPNavigationController', '~> 2.1.3'
end

Licenses

All source code is licensed under the MIT License.

如果你在天朝

框架支持为 UINavigationController 提供全屏 pop 和 push 手势支持, 并且你可以为每个控制器自定义 UINavigationBar, 注意, 每个控制器的 UINavigationBar 是互不干扰的. 实现基于AOP思想, 不会侵入你的项目.

特性

  • 全屏 pop 手势支持
  • 全屏 push 到绑定的控制器支持
  • 为每个控制器定制 UINavigationBar 支持(包括设置颜色和透明度)
  • 为每个控制器添加底部联动视图支持
  • 自定义 pop 手势范围支持(从屏幕最左侧开始计算宽度)
  • 为单个控制器关闭 pop 手势支持
  • 为所有控制器关闭 pop 手势支持
  • 当当前控制器使用 AVPlayer 播放视频的时候, 使用自定义的 pop 动画以保证 AVPlayer 流畅播放.

组件要求

  • iOS 8.0 or later
  • Xcode 8.0 or later

了解实现思路和源码解析

联系

  • 如果你发现了bug, 请帮我提交issue
  • 如果你有好的建议, 请帮我提交issue
  • 如果你想贡献代码, 请提交请求

安装

具体使用

初始化

Objective-C:

#import <JPNavigationControllerKit.h>

JPNavigationController *nav = [[JPNavigationController alloc]initWithRootViewController:YourVc];

PushViewController

Objective-C:

[self.navigationController pushViewController:YourVc animated:YES];

PopToViewController

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_popToViewControllerWithClass:[JPNavigationControllerDemo_linkBar class] handler:^UIViewController * _Nullable(NSArray<UIViewController *> * _Nullable viewControllers, NSError * _Nullable error) {
        
        if (!error) {
            return viewControllers.firstObject;
        }
        else{
            NSLog(@"%@", error);
            return nil;
        }
        
    } animated:YES];

自定义 UINavigationBar

Objective-C:

// 隐藏导航条.
self.navigationController.navigationBarHidden = YES;

// 自定义 UINavigationBar 颜色
[self.navigationController.navigationBar setBackgroundImage:aImage forBarMetrics:UIBarMetricsDefault];

添加push手势绑定控制器

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;
}

自定义 pop 手势响应范围

Objective-C:

self.navigationController.jp_interactivePopMaxAllowedInitialDistanceToLeftEdge = aValue;

禁用单个控制器 pop 手势

Objective-C:

self.navigationController.jp_closePopForAllViewController = YES;

禁用所有控制器 pop 手势

Objective-C:

self.navigationController.jp_closePopForAllViewController = YES;

因为界面中有 AVPLayer 在播放视频, 所以为了保证 pop 手势执行的过程中视频能正常播放, 使用自定义的 pop 动画

Objective-C:

self.navigationController.jp_useCustomPopAnimationForCurrentViewController = YES;

集成到你的项目

两种选择把框架集成到你的项目:

  • 使用 CocoaPods
  • 下载我的demo, 把'JPNavigationController'文件夹拽到你的项目中

使用 CocoaPods 安装

CocoaPods is a dependency manager for Objective-C, which automates and simplifies the process of using 3rd-party libraries in your projects. See the Get Started section for more details.

Podfile

platform :ios, '8.0'
target "YourProjectName" do
pod 'JPNavigationController', '~> 2.1.3'
end

证书

All source code is licensed under the MIT License.

赞助

你这一赞助,我写的就更来劲了!

微信赞助扫码

支付宝赞助扫码

About

This library provides an fullScreen pop and push gesture for UINavigationController with customize UINavigationBar for each single support.

Resources

License

Stars

Watchers

Forks

Packages

No packages published