Giter Site home page Giter Site logo

fdfullscreenpopgesture's Introduction

FDFullscreenPopGesture

An UINavigationController's category to enable fullscreen pop gesture in an iOS7+ system style with AOP.

Overview

snapshot

这个扩展来自 @J_雨 同学的这个很天才的思路,他的文章地址:http://www.jianshu.com/p/d39f7d22db6c

Usage

AOP, just add 2 files and no need for any setups, all navigation controllers will be able to use fullscreen pop gesture automatically.

To disable this pop gesture of a navigation controller:

navigationController.fd_fullscreenPopGestureRecognizer.enabled = NO;

To disable this pop gesture of a view controller:

viewController.fd_interactivePopDisabled = YES;

Require at least iOS 7.0.

View Controller Based Navigation Bar Appearance

It handles navigation bar transition properly when using fullscreen gesture to push or pop a view controller:

  • with bar -> without bar
  • without bar -> with bar
  • without bar -> without bar

snapshot with bar states

This opmiziation is enabled by default, from now on you don't need to call UINavigationController's -setNavigationBarHidden:animated: method, instead, use view controller's specific API to hide its bar:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.fd_prefersNavigationBarHidden = NO;
}

And this property is NO by default.

View Controller With ScrollView

If you want to use fullscreen pop gesture in ViewController with scrollView or subclass of scrollView , you should customize the scrollView or subclass of scrollView and overload the gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: method . like this:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    if (self.contentOffset.x <= 0) {
        if ([otherGestureRecognizer.delegate isKindOfClass:NSClassFromString(@"_FDFullscreenPopGestureRecognizerDelegate")]) {
            return YES;
        }
    }
    return NO;
}

Installation

Use CocoaPods

pod 'FDFullscreenPopGesture', '1.1'

Release Notes

1.1 - View controller based navigation bar appearance and transition.
1.0 - Fullscreen pop gesture.

License

MIT

fdfullscreenpopgesture's People

Contributors

afantree avatar leichunfeng avatar philcn avatar readmecritic avatar sunnyxx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fdfullscreenpopgesture's Issues

在用Swift写的IO8应用中不能达到效果

J_雨 同学的 那篇文章 前两天也看过. 并且用swift也试着改编了一下.
但是不能达到 任意进度的 拖动与 还原. 只要一拖动,就会完整的执行完POP. 就和点击返回按钮的效果是一样的.

今天试着把 FDFullscreenPopGesture 导入到swift项目中, 用ObjectiveCBridge.h 做关联.
结果还是一样. 轻轻的一拖动,就 POP 完了..

关于NavigationBarHidden问题

隐藏系统的NavigationBar,现在似乎必须要调用你们提供的方法
self.fd_prefersNavigationBarHidden = YES;

系统的隐藏方法,有个是否动画隐藏选项,请问你们你们这有提供这个选项么?

能不能不碰私有API?

代码挺好,但是利用了私有API有点虚,万一审核人员较真就悲剧了,而且感觉就是个定时炸弹。技术上来说,有没可能绕开?

// 1. 私有变量标志transition动画是否正在进行
[self.navigationController valueForKey:@"_isTransitioning"];
// 2. 一个内部的selector
NSSelectorFromString(@"handleNavigationTransition:");

顺道问下,为啥需要者两个私有的API?

导航栏返回点击偶尔不响应

添加后,只要是导航控制器,当点击返回时,都可能不响应pop,只是导航栏跳一下,页面无变化,只能靠全屏手势返回。导航栏左边的默认返回格式做了统一修改,将backbaritem 设为@“返回”,其他未修改

导航栏横竖屏的问题

从有导航栏的界面进去一个没有导航栏的界面,没有导航栏的界面支持横竖屁,横屏之后,再退出横屏,滑动返回就会出现导航栏错乱

禁用滑动返回手势

设置了self.fd_interactivePopDisabled = YES; 当前控制器全屏滑动手势被禁止了,这时还需要进行系统的侧边滑动返回手势 无法禁止了。

ios7 导航栏手势返回 显示异常

我的uinavigationcontroller 根视图导航条上有 左 右两个自定义的UIBarButtonItem 导航栏的title 是图片,我push到下个页面后 返回 左 右两个自定义的UIBarButtonItem及 导航栏title 消失了 ios8不会有这问题,您提供的demo 在ios7下 也会有其他的问题

异常
1

正常是这样
2

避免私有方法的改动,应该要判断一下吧

fd_pushViewController:animated:方法内,是不是应该这样加一段:

        if (![internalTarget respondsToSelector:internalAction])
        {
            [self.fd_fullscreenPopGestureRecognizer removeTarget:internalTarget action:internalAction];
            self.interactivePopGestureRecognizer.enabled = YES;
        }

如果apple的这个私有方法有改动的话,不判空程序会直接奔溃。

你这个一堆问题,先提两个

1 如果一个启动页面是用NavigationController 包的,且这个启动页面navigationBar 是隐藏的,你这个初始化的时候 顶部会有白条闪过
2 present 一个 MFMessageController 顶部的取消返回按钮没有了,原因是被覆盖了。

滑动有问题

如果拉开后再拉回去,就是手指点按在ViewController上不松开,左右滑动,会一直调用viewWillAppear

调用系统相册问题

调用系统相册会有问题,调用系统相册后,点击图片进入编辑页面用了 你这个会有导航栏 正常情况下应该是没有的

连着Push两个NavigationBarHidden的ViewController之后出现BUG

1、push一个ViewController,hideNavigationBar
2、push一个ViewController,hideNavigationBar
3、右滑触发返回手势,不要完全返回,左滑取消返回手势
4、正常滑动返回两个ViewController
5、任意Push一个ViewController,发现NavigationBarItem为viewControllers[0]的NavigationBarItem

另外,早上无意发现另一种方法。。。
NavigationController中直接使用
object_setClass(self.interactivePopGestureRecognizer, [UIPanGestureRecognizer class]); 即可

BUG如下图所示。。当然这个直接使用系统的也会有问题

navigationbug_2

求教一个UIRectEdgeNone导致的UINavigationBar动画问题

此问题主要还是一个手势返回的动画问题,与阳神原博的问题有点类似,但有所区别的,这里所说的情况都是真Bar。

问题的详情细述在这里

这里还是简单描述一下吧:
有两个VC分别为A和B,A顶部的导航栏为透明,view的顶部B顶部的导航栏不透明,从A push到B,手势返回时发现导航栏提前显示了A顶部导航栏的背景视图。定位原因为B中self.edgesForExtendedLayout = UIRectEdgeNone;这行代码的使用,如果把它注释,动画效果是不会混乱了,但是就没有了UIViewController中view的y坐标从64(statusBar和navigationBar)开始计算的效果。

如何在使用真Bar与UIRectEdgeNone的同时使返回动画丝般顺滑呢?

在使用FDFullscreenPopGesture情况下无法调出相机页面

iOS版本8.4 Xcode 版本6.4.
在排除了一系列可能的问题下,在使用的情况下,出现相机页面无法显示。
UIImagePickerController *pickerController = [[UIImagePickerController alloc]init];
pickerController.allowsEditing = NO;
pickerController.delegate = self;
pickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:pickerController animated:YES completion:^{
}];

返回过程中视频播放会卡顿

用全局手势从一个含有AVPlayer播放器的UIViewcontroller返回上一层controller的过程中,视频播放会卡顿,希望解决下

遇到的问题

当设置了navigationitem.leftBarButtonItem后还能滑动pop,ios自带的是不能的

image

1.1返回时隐藏NavigationBar失效

  • (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    // Do any additional setup after loading the view.
    [[self navigationController] setNavigationBarHidden:YES animated:YES]; //并没有卵用了
    }

1.0测试了下没有问题。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.