在 ViewController 之间转换时使用 UIView.transition 和 UIView.AnimationOptions 时出现动画问题
Problem with animation when using UIView.transition & UIView.AnimationOptions when transitioning between ViewControllers
我正在使用 Swift 并尝试在菜单屏幕 ViewController(启动ViewController)和游戏 ViewController(InGameViewController ) 使用以下代码。然而,虽然过渡工作正常,但无论我使用什么动画选项(当前使用 .transitionCrossDissolve
),动画总是从左上角开始扩展以填满整个屏幕。我可以更改持续时间并且动画会按预期进行调整,但无论 UIView.AnimationOption 我使用什么,它始终使用相同的动画。
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "InGameViewController")
vc.view.frame = (self.view?.frame)!
vc.view.layoutIfNeeded()
UIView.transition(with: self.view!, duration: 0.3, options: .transitionCrossDissolve, animations: {
self.view?.window?.rootViewController = vc
}, completion: { (true) in
})
如何根据需要制作这个过渡动画?非常感谢
func changeRootViewControllerTo(_ controller: UIViewController, animated: Bool = false) {
UIApplication.shared.keyWindow?.rootViewController = controller
guard
animated,
let window = UIApplication.shared.keyWindow else {
return
}
UIView.transition(with: window,
duration: 0.3,
options: .transitionCrossDissolve,
animations: nil,
completion: nil)
}
在我的例子中,这很完美。我认为您不需要添加这些行
vc.view.frame = (self.view?.frame)!
vc.view.layoutIfNeeded()
并在转换方法中将 self.view
更改为 window
。
我正在使用 Swift 并尝试在菜单屏幕 ViewController(启动ViewController)和游戏 ViewController(InGameViewController ) 使用以下代码。然而,虽然过渡工作正常,但无论我使用什么动画选项(当前使用 .transitionCrossDissolve
),动画总是从左上角开始扩展以填满整个屏幕。我可以更改持续时间并且动画会按预期进行调整,但无论 UIView.AnimationOption 我使用什么,它始终使用相同的动画。
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "InGameViewController")
vc.view.frame = (self.view?.frame)!
vc.view.layoutIfNeeded()
UIView.transition(with: self.view!, duration: 0.3, options: .transitionCrossDissolve, animations: {
self.view?.window?.rootViewController = vc
}, completion: { (true) in
})
如何根据需要制作这个过渡动画?非常感谢
func changeRootViewControllerTo(_ controller: UIViewController, animated: Bool = false) {
UIApplication.shared.keyWindow?.rootViewController = controller
guard
animated,
let window = UIApplication.shared.keyWindow else {
return
}
UIView.transition(with: window,
duration: 0.3,
options: .transitionCrossDissolve,
animations: nil,
completion: nil)
}
在我的例子中,这很完美。我认为您不需要添加这些行
vc.view.frame = (self.view?.frame)!
vc.view.layoutIfNeeded()
并在转换方法中将 self.view
更改为 window
。