gpt4 book ai didi

xcode10 - Xcode 10 : Custom Animated Transitions Stuck

转载 作者:行者123 更新时间:2023-12-02 13:16:46 26 4
gpt4 key购买 nike

我的应用程序有两个 View Controller (VC A 和 B)以及它们之间的自定义转换。

在 VC A 上使用向左平移手势时,交互式动画过渡会以模态方式呈现 VC B 在 A 上从右侧(从右到左)滑入的情况。要关闭 VC B,用户可以:

  • 使用向右平移手势:将触发交互式转换,将 VC B 滑回右侧并露出 VC A。VC B 的位置由平移手势状态交互确定。交互由 UIPercentDrivenInteractiveTransition 对象“驱动”。
  • 使用 VC B 导航栏上的“关闭”按钮。这将触发自定义转换(向右滑动),无需交互(仅动画)。

问题是在 Xcode 10 Seed(版本 10A254a)+ iOS 12 模拟器(X 或 XR 或 XS)上进行测试我可以轻松进入自定义转换永远不会完成且 UI 卡在奇怪的状态:

  • UI 卡在 VC B 上,无法使用手势或点击。
  • 应用程序没有卡住 - 我可以看到控制台日志仍在滚动,网络事件正在运行(日志中没有错误)
  • 在这种卡住状态下暂停应用程序,我可以看到 com.apple.main-thread 没有卡住。
  • 当我点击“调试 View 层次结构”时,发生了一些奇怪的事情:在 sim 屏幕上我仍然可以看到 VC B,并且所有 UI 都被禁用。在 View 调试器主视图上 - 我可以看到 VC A 的 subview 被绘制,就像转换已完成一样。在 View 调试器左侧 TreeView 中 - 我可以看到 VC B 的 View 层次结构。

此问题从未出现在任何以前版本的 Xcode 和/或 Xcode 10/iOS12 之前的 iOS 上。

这是我的自定义 UIViewControllerAnimatedTransitioning 中的 animateTransition 方法

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {

guard let fromVC = transitionContext.viewController(forKey: .from), let toVC = transitionContext.viewController(forKey: .to) else {
transitionContext.completeTransition(false)
return
}

let containterView = transitionContext.containerView
containterView.insertSubview(toVC.view, belowSubview: fromVC.view)

let bounds = fromVC.view.bounds
var xOffsetMultiplier : CGFloat = 0.0
var yOffsetMultiplier : CGFloat = 0.0

switch direction {
case .up:
yOffsetMultiplier = -1.0
case .right:
xOffsetMultiplier = 1.0
case .left:
xOffsetMultiplier = -1.0
case .down:
yOffsetMultiplier = 1.0
}

print(xOffsetMultiplier,bounds.size.width,bounds.size.height )
UIView.animate(withDuration: duration, animations: {
print("animating...")
//fromVC.navigationController?.navigationBar.alpha = 0.0
fromVC.view.frame = fromVC.view.frame.offsetBy(dx: xOffsetMultiplier * bounds.size.width, dy: yOffsetMultiplier * bounds.size.height)
}, completion: { finished in
print("completed animation")
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
//fromVC.navigationController?.navigationBar.alpha = 1.0
})

}

打印出来只是为了调试。

这是可以轻松重现问题的序列:

  1. 使用平移手势开始从 B 返回到 A 的交互式过渡,但永远不会完成它 - 这将调用 UIPercentDrivenInteractiveTransition 对象上的 cancel() + 我可以验证动画完成了。
  2. 点击“关闭”按钮可调用非交互式过渡来关闭 B。B 永远不会关闭,自定义动画也永远不会完成!

在设备上,我根本无法重现此问题(目前) - 所有转换均按预期工作。

最佳答案

尝试在 UIPercentDrivenInteractiveTransition 中设置 wantsInteractiveStart = false

关于xcode10 - Xcode 10 : Custom Animated Transitions Stuck,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52355316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com