iOS Swift:ViewController 自定义转换卡住了
iOS Swift: ViewController custom transitions stuck
在我的项目中,我在某些视图上使用自定义转换,而在其他视图上默认返回标准转换。
对于这种情况,我使用函数:
navigationController(_:animationControllerFor:from:to:)
https://developer.apple.com/documentation/uikit/uinavigationcontrollerdelegate/1621846-navigationcontroller
我 return 我自己的 UIViewControllerAnimatedTransitioning
或 nil
当我想要标准转换时,如 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 会卡在下一次推送中。
有关更多信息和修复,请参阅此内容:
在我的项目中,我在某些视图上使用自定义转换,而在其他视图上默认返回标准转换。
对于这种情况,我使用函数:
navigationController(_:animationControllerFor:from:to:)
https://developer.apple.com/documentation/uikit/uinavigationcontrollerdelegate/1621846-navigationcontroller
我 return 我自己的 UIViewControllerAnimatedTransitioning
或 nil
当我想要标准转换时,如 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 会卡在下一次推送中。
有关更多信息和修复,请参阅此内容: