当我连续点击按钮时,我的应用程序崩溃了。点击按钮时,我正在制作
transitionFlipFromRight
动画。
这是我在按钮操作上编写的代码片段:
func transitionBetweenViews() {
let fromViewController = aController
let toViewController = bController
let options: UIView.AnimationOptions = self.viewModel.State == .something ? .transitionFlipFromRight : .transitionFlipFromLeft
if !self.children.contains(toViewController) {
fromViewController.willMove(toParent: nil)
self.addChild(toViewController)
}
self.containerView.fillWithView(toViewController.view)
self.transition(from: fromViewController, to: toViewController, duration: 0.5, options: options, animations: {
}, completion: { _ in
fromViewController.removeFromParent()
toViewController.didMove(toParent: self)
})
}
但我观察到,当我将
duration
从 0.5 更改为 0.1 时,应用程序可以正常工作,但动画看起来不太好。
这是崩溃日志:-
*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“调用 -[UIViewControllertransitionFromViewController:toViewController:duration:options:animations:completion:] 时,子视图控制器必须具有公共父视图控制器”
当之前的转换仍在进行时,开始转换是不连贯的。因此,只需防止在转换过程中点击按钮即可。只需在按钮操作开始时关闭用户交互,然后在完成处理程序中将其重新打开即可。