为了在使用交叉溶解动画将视图控制器推送/弹出到导航堆栈时替换默认动画,我实现了符合协议UIViewControllerAnimatedTransitioning
的自定义视图控制器转换。
这是我对动画功能的实现:
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
guard let fromViewController = transitionContext.viewController(forKey: .from),
let toViewController = transitionContext.viewController(forKey: .to) else {
return
}
let animationView = transitionContext.containerView
animationView.addSubview(toViewController.view) //
let duration = transitionDuration(using: transitionContext)
fade(from: fromViewController.view,
to: toViewController.view,
duration: duration,
completion: {
let didComplete = !transitionContext.transitionWasCancelled
transitionContext.completeTransition(didComplete)
})
}
使用我的 Debug 配置运行应用程序时,像魅力一样。但是,当使用我的 Release 配置运行它时,它会在标有的行中崩溃。
导致崩溃的区别在于 Swift编译器优化级别,其定义如下:
我真的认为整个模块优化对于我们的发布来说是个不错的主意。但我没有看到这里可能发布哪个变量并使用print
语句我甚至检查过这一行中使用的所有变量都已正确设置,即animationView
和{{1 }}。那么到底是怎么回事呢? 导致崩溃的“优化”是什么?