IOS全屏左侧滑(系统方法)

1.在自定义的NavigationController中遵守<UIGestureRecognizerDelegate>。

2.在ViewDidLoad里调用setupSlideGesture方法。

做到以上两步就能实现简单的全屏侧滑,但是如果项目中有的页面navigationBar是需要隐藏的,这时全屏侧滑过渡到这个页面时会很难看,而且还会出现NavigationBar内栈顺序错乱(例如需要隐藏Bar的页面是A,A页面Push出的某个页面为B,这时在页面B上来回拖动但不完全滑到A页面,滑动多次后再滑到A,然后从A再Push到B这时B的NavigationBar上得标题可能就会错乱)。

在需要隐藏NavgationBar的当前VC中添加

    [self.navigationControllersetNavigationBarHidden:YESanimated:YES];解决以上问题。

- (void)setupSlideGesture {

    

    UIGestureRecognizer *gesture =self.interactivePopGestureRecognizer;

    gesture.enabled =NO;

    UIView *gestureView = gesture.view;

    

    UIPanGestureRecognizer *popRecognizer = [[UIPanGestureRecognizeralloc]init];

    popRecognizer.delegate =self;

    popRecognizer.maximumNumberOfTouches =1;

    [gestureView addGestureRecognizer:popRecognizer];

    

    /**

     *  获取系统手势的target数组

     */

    NSMutableArray *_targets = [gesturevalueForKey:@"_targets"];

    /**

     *  获取它的唯一对象,我们知道它是一个叫UIGestureRecognizerTarget的私有类,它有一个属性叫_target

     */

    id gestureRecognizerTarget = [_targetsfirstObject];

    /**

     *  获取_target:_UINavigationInteractiveTransition,它有一个方法叫handleNavigationTransition:

     */

    id navigationInteractiveTransition = [gestureRecognizerTargetvalueForKey:@"_target"];

    /**

     *  通过前面的打印,我们从控制台获取出来它的方法签名。

     */

    SEL handleTransition =NSSelectorFromString(@"handleNavigationTransition:");

    /**

     *  创建一个与系统一模一样的手势,我们只把它的类改为UIPanGestureRecognizer

     */

    [popRecognizer addTarget:navigationInteractiveTransitionaction:handleTransition];

}


- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {

    /**

     *  这里有两个条件不允许手势执行,1、当前控制器为根控制器;2、如果这个pushpop动画正在执行(私有属性)

     */

    returnself.viewControllers.count !=1 && ![[selfvalueForKey:@"_isTransitioning"]boolValue];

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值