swift - 在 ViewController 之间转换时使用 UIView.transition 和 UIView.AnimationOptions 时出现动画问题
问题描述
我正在使用 Swift 并尝试使用以下代码在菜单屏幕视图控制器 (LaunchViewController) 和游戏视图控制器 (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
过渡方法。
推荐阅读
- exe - 如何将SB3制作成exe
- java - 如何访问特定文件夹并使用 Scoped Storage 将文件写入其中
- events - Chai closeTo 谈以太坊活动
- ignite - 集群掉电如何快速恢复?
- google-sheets - 如何基于一个标题组合来自 2 张工作表的数据
- ruby - 如何在 ZendeskAPI ruby gem 中进行分页?
- python - 如何打印列表中特定元素之后的所有元素?
- reactjs - 无法从 Firestore 数据库中获取数据
- r - 在 R 中创建具有 rdrobust 输出的 stargazer 表
- django - 注释:将参数传递给子查询