我正在使用Xcode 9.2和swift 4开发一个应用程序,我需要在我的应用程序中只允许一个视图更改为横向,所以我将下面的代码添加到我的AppDelegate
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
if globalVariables.gIsDosageView == "Y" {
if UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight {
return UIInterfaceOrientationMask.all;
} else {
return UIInterfaceOrientationMask.portrait;
}
} else {
return UIInterfaceOrientationMask.portrait;
}
}
全局变量在每个其他控制器上设置为“N”,因此只有DosageView将其设置为“Y”。在DosageView控制器中,我添加了此方法以帮助进行转换。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
hideViews()
if size.width < 400 {
DispatchQueue.main.async() {
self.userImg.isHidden = false
self.burgerImg.isHidden = false
self.deviceImg.isHidden = false
self.portraitView.isHidden = false
self.landscapeView.isHidden = true
}
}
else {
DispatchQueue.main.async() {
self.userImg.isHidden = true
self.burgerImg.isHidden = true
self.deviceImg.isHidden = true
self.portraitView.isHidden = true
self.landscapeView.isHidden = false
self.loadLandscapeView()
}
}
}
我已经设置了一个LandscapeView和一个PortraitView,上面的方法有助于在它们之间切换,一切正常。如果我移动到下一个视图或返回到主屏幕,然后返回到DosageView然后将方向更改为横向它可以工作,但如果我转到下一个视图然后从那里到Connect视图并连接(通过BLE, NFC或QR)然后返回DosageView。当我将方向更改为横向时,它将更改回“连接”视图。这两个视图之间没有直接的联系,因为您必须通过Instruction视图才能进入DosageView的Connect View,那么这怎么会发生呢?
当我在调试下运行它并在Connect View上的ViewDidLoad中放置一个断点时,它会在每次DosageView更改为Landscape时运行。如果有人能告诉我发生了什么,我会很感激,因为这让我发疯。
答案 0 :(得分:0)
实际上是一位同事为我排序,正确地指出这是一个导致问题的Lottie跑叫。对于使用Lottie并遇到此问题的任何人,只需检查您的动画代码即可。我最初抄袭了Splash屏幕中的代码,如下所示
splashAnimation!.loopAnimation = false
splashAnimation!.play(fromProgress: 0,
toProgress: 1.0,
withCompletion: { (finished) in
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "Menu")
self.present(controller, animated: true, completion: nil)
})
此代码在完成后移动到主屏幕时工作正常。但是,导致问题的屏幕在两个不同的屏幕之间移动并解决问题,我的同事只是删除了withCompletion部分,如下所示
splashAnimation!.loopAnimation = true
splashAnimation!.play(fromProgress: 0,
toProgress: 1.0)