iOS 侧滑返回的那点事

作者: 雪中夜归人 | 来源:发表于2018-05-21 11:41 被阅读69次

    前言

    对于iOS用户来说,右滑返回是一个比较常见的。那么对于一个开放者来说,怎么去实现?其中又有哪些坑呢?

    目前的侧滑效果有两种:

    1.边缘触发侧滑(苹果原生)
    2.全屏触发侧滑

    而实现目前有三种方式:

    1.系统自带(不自定义导航)
    2.使用系统动画去实现
    3.自定义导航,默认开启系统的返回手势
    参考文章:
    iOS侧滑返回的三种实现方式

    正文

    至于两种侧滑效果孰好孰坏没有办法说,这就需要根据公司的产品需求去衡量。
    对于全屏手势的最简便的实现方式就是定义一个全屏手势,其实现方式还是去取系统的左滑手势(@select(handleNavigationTransition:))实现。

    重点坑

    坑点一

    Bug描述:当app集成了侧滑返回手势,在根目录侧滑手势,再任意点击push新的控制器,页面卡死。
    解决过程:用view去分层查看会看到新控制器是push出来的。但页面上却没有。
    解决方法:禁用根目录下的侧滑手势。

    - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
    {
        if ( gestureRecognizer == self.interactivePopGestureRecognizer )
        {
            UIViewController *vc = self.viewControllers.lastObject;
           //  禁用某些不支持侧滑返回的页面    
            if ([vc isKindOfClass:[OpenContainerDoorVC class]]) {
                return NO;
            }
          //  禁用根目录的侧滑手势
            if ( self.viewControllers.count < 2 || self.visibleViewController == [self.viewControllers objectAtIndex:0] )
            {
                return NO;
            }
        }
        return YES;
    }
    

    坑点二

    Bug描述:当从扫码页面跳到新页面时,侧滑返回就又回到扫码页面,但实际希望到扫码的上一个页面。
    解决过程:我们知道navigation是有viewControllers这样一个压栈出栈的属性的。那么假如可以修改其中的控制器的顺序或者增删控制器,自然可以完美解决这个问题。
    解决方法:

    NSMutableArray *VCs = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];
    // 剔除想要移除的控制器
    [VCs removeObject:self];
    [self.navigationController setViewControllers:VCs];
    

    坑点三

    Bug描述:当当前页面最底层是scrollView时,侧滑手势失效问题。
    解决思路:当在边缘时,禁用scrollView的滑动手势。
    解决方法:

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
    {
        if ([otherGestureRecognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]]) {
            if (gestureRecognizer.state != UIGestureRecognizerStatePossible) {
                return YES;
            }
        }
        return NO;
    }
    

    后来看到一篇更好的文章去处理这方面的问题,此处记录一二。
    一行代码,让你的应用中UIScrollView的滑动与侧滑返回并存

    后记

    每天进步一点点!!!加油!!!

    相关文章

      网友评论

        本文标题:iOS 侧滑返回的那点事

        本文链接:https://www.haomeiwen.com/subject/ntqfjftx.html