iOS Swift:ViewController 自定义转换卡住了

iOS Swift: ViewController custom transitions stuck

在我的项目中,我在某些视图上使用自定义转换,而在其他视图上默认返回标准转换。

对于这种情况,我使用函数:

navigationController(_:animationControllerFor:from:to:) https://developer.apple.com/documentation/uikit/uinavigationcontrollerdelegate/1621846-navigationcontroller

我 return 我自己的 UIViewControllerAnimatedTransitioningnil 当我想要标准转换时,如 apple 文档中所写。

大部分时间它都能完美运行。 但有时当 returning nil 并因此使用 iOS 默认转换时,应用程序会卡住。

下一个要打开的 ViewController 仍然得到 willAppear,但是 viewDidAppear 没有被调用,也没有任何反应。也不再像主线程被阻塞时那样接收到任何操作。

将应用程序置于后台并回到前面修复此状态,然后显示所需的 VC。

这是我决定应该使用哪个转换的代码。

func navigationController(_ navigationController: UINavigationController,
                          animationControllerFor operation: UINavigationController.Operation,
                          from fromVC: UIViewController,
                          to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
    switch operation {
    case .push:
        if let vc = toVC as? PullToCloseViewController {
            self.pullInteractor = PullToCloseInteractor(attachTo: toVC)
            vc.pullInteractor = self.pullInteractor
            return PullToCloseAnimator(isPresenting: true)
        }
        return nil
    case .pop:
        if let vc = fromVC as? PullToCloseViewController {
            return PullToCloseAnimator(isPresenting: false)
        }
        return nil
    default:
        return nil
    }
}

我找到了问题的原因和解决方案。 它只是与我的自定义转换远程相关。

问题是当显示的 ViewController 是根 ViewController 时,navigationController 的标准 interactivePopGestureRecognizer 仍然启用。然后向后滑动 OS 会卡在下一次推送中。

有关更多信息和修复,请参阅此内容: