可视化下如何更好的全屏返回

根据网上的资料现记录下两种实现全屏返回的方法:
方法一:

首先创建一个BaseNavigationController 只要添加下面的方法就搞定了。
- (void)viewDidLoad {
    [super viewDidLoad];
    NSArray *targets = [self.interactivePopGestureRecognizer valueForKey:@"_targets"];
    id target = [targets.firstObject valueForKey:@"target"];
    SEL action = NSSelectorFromString(@"handleNavigationTransition:");
    //创建滑动手势
    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc]initWithTarget:target action:action];
    [self.view addGestureRecognizer:panGesture];
}

方法二:
<推荐使用,第一种会有小问题>

#import <objc/runtime.h>
@interface BaseNavigationController ()<UINavigationControllerDelegate>
/** 系统手势代理 */
@property(nonatomic, strong) id popGesture;
/** 实现代理*/
self.popGesture = self.interactivePopGestureRecognizer;
self.delegate = self;

/** 实现代理方法 */
#pragma mark - UINavigationControllerDelegate
// 当控制器显示完毕的时候调用
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    // 根据 栈 先进后出
    if (self.viewControllers[0] == viewController) {    // 根控制器
        // 还原代理
        self.interactivePopGestureRecognizer.delegate = self.popGesture;
    } else  {   // 非控制器
        // 清空手势代理就能实现滑动返回,iOS6不支持
        self.interactivePopGestureRecognizer.delegate = nil;
    }
}

最后,只要在Main.storyboard将NavigationCotroller继承BaseNavigationController 就可以了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,138评论 1 32
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,229评论 4 61
  • 算起来,去年4月搬家此处,至今已有1年。 当初为了满足自己的口腹之欲,在四楼顶上规划搭起了一块十多平米的空间,作为...
    觸茶阅读 433评论 2 6
  • 随行的孩子比较多,死宅数量太少,于是第二天也是非常常规的景点:迪士尼海洋。 说起来迪士尼公园有很多,迪士尼海洋公园...
    夕枫晚照阅读 546评论 0 0
  • 有时候,倒喜欢这样的大雨天气,临窗静坐,慢慢听雨。看层层远山绵延起伏,看苍生万物寂然沉默,看天与地在薄雾里渐渐沉沦...
    轻婉飞扬阅读 418评论 12 19