返回

iOS 右滑返回的实现及其在 iOS 13.4 中的适配方案

IOS

iOS 系统自带的返回按钮,在一些情况下使用并不方便。因此,右滑返回手势便应运而生,它不仅提升了用户体验,还为用户提供了额外的返回操作方式。本文将深入探讨 iOS 中右滑返回的实现原理,并提供针对 iOS 13.4 版本的适配方案,帮助开发者轻松应对系统升级带来的影响。

右滑返回的原理

iOS 系统中的右滑返回功能是利用了一个名为 interactivePopGestureRecognizer 的系统手势识别器实现的。当用户从屏幕边缘向右滑动时,interactivePopGestureRecognizer 会被触发,并通知当前控制器执行返回操作。

使用场景

右滑返回手势的应用场景非常广泛,特别是以下情况:

  • 返回按钮较小,难以触发,如底部 Tab 栏中的返回按钮。
  • 用户习惯于从屏幕边缘滑动返回,如安卓用户。
  • 提升用户交互体验,提供更流畅、自然的返回方式。

实现步骤

在 iOS 项目中实现右滑返回功能,需要以下几个步骤:

  1. 开启右滑返回手势:AppDelegatedidFinishLaunchingWithOptions 方法中,添加以下代码:

    self.navigationController?.interactivePopGestureRecognizer?.isEnabled = true
    
  2. 禁用边缘手势冲突: 在使用右滑返回手势时,可能会与其他边缘手势(如侧滑菜单)产生冲突。为了解决这个问题,需要禁用边缘手势冲突:

    self.navigationController?.interactivePopGestureRecognizer?.delegate = self
    

    然后,在 UIGestureRecognizerDelegate 中实现以下方法:

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }
    

iOS 13.4 适配方案

在 iOS 13.4 版本中,苹果对 interactivePopGestureRecognizer 进行了改动,导致原有实现的右滑返回功能失效。为了解决这个问题,需要进行以下适配:

  1. 添加自定义边缘手势:AppDelegatedidFinishLaunchingWithOptions 方法中,添加以下代码:

    let customPopGestureRecognizer = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(handleCustomPopGestureRecognizer(_:)))
    customPopGestureRecognizer.edges = .left
    self.navigationController?.view.addGestureRecognizer(customPopGestureRecognizer)
    
  2. 自定义手势响应方法:

    @objc func handleCustomPopGestureRecognizer(_ gestureRecognizer: UIScreenEdgePanGestureRecognizer) {
        if gestureRecognizer.state == .began {
            self.navigationController?.popViewController(animated: true)
        }
    }
    

通过以上适配,可以在 iOS 13.4 及以上版本中恢复右滑返回功能。

深入解析

除了上述实现方法外,还可以通过以下方式对右滑返回功能进行深入定制:

  • 修改滑动距离: 可以通过设置 interactivePopGestureRecognizer.minimumDistanceForPan 属性来修改右滑返回所需的滑动距离。
  • 修改滑动速度: 可以通过设置 interactivePopGestureRecognizer.velocityForTranslation 属性来修改右滑返回的滑动速度。
  • 自定义过渡动画: 可以通过实现 UINavigationControllerDelegate 协议的 navigationController(_:animationControllerForOperation:from:to:) 方法来自定义右滑返回的过渡动画。

通过这些高级定制选项,开发者可以根据自己的项目需求和用户偏好,打造更加个性化、符合用户习惯的右滑返回体验。