gpt4 book ai didi

ios - 在 UIViewController 上为 Swift 中的特定 View Controller 锁定方向

转载 作者:行者123 更新时间:2023-11-28 07:06:30 25 4
gpt4 key购买 nike

我的应用程序中有一个用户设置,应该将特定 View Controller 的方向设置为横向或纵向。用户按下主屏幕上的按钮,通过设置应由其他 Controller 读取的全局变量来切换应用中其他 View Controller 的横向/纵向。

我已经扩展了 UINavigationController 如下:

extension UINavigationController {
public override func supportedInterfaceOrientations() -> Int {
return visibleViewController.supportedInterfaceOrientations()
}
}

我也尝试过将 visibleViewController 更改为 topViewController,但没有成功。

然后在我所有的 UIViewController 文件中覆盖该函数:

override func supportedInterfaceOrientations() -> Int {
return appOrientation // global user setting
}

问题是唯一调用此函数的 View Controller 是主视图 Controller (用户看到的第一个 View ,用户可以在其中选择方向)。为什么在随后推送的 View Controller 中没有调用此函数?

当用户切换时,全局 appOrientation 变量设置为以下之一:

let orientationPortrait = Int(UIInterfaceOrientationMask.Portrait.rawValue | UIInterfaceOrientationMask.PortraitUpsideDown.rawValue)
let orientationLandscape = Int(UIInterfaceOrientationMask.Landscape.rawValue)

如果我在主视图 Controller 的 supportedInterfaceOrientation 函数中返回这些定义之一,则整个应用程序将面向定义(不是我想要的)。

我一定是漏掉了什么。

最佳答案

我想我有一个解决方案。我不知道我是否完全理解了这个问题,但我在主视图上设置了一个按钮(这是为了模拟您的设置页面)我做了一个名为 presses 的变量,当按下按钮时,1 被添加到 presses ,当再次按下按钮时,从按下次数中减去 1。 (我还更改了按下按钮时的名称,因为我是那样的强制症)。

然后在下一个 View 中,我在 viewwillappear 函数中做了一个 if 语句。我询问 presses 是否等于 1,设置方向为横向,如果 presses 等于 2,则将方向设置为纵向。我添加了一个导航栏,这样你就可以来回尝试两个方向。我确保将主视图的方向设置为纵向,因为你设置了整个设备方向,所以如果你简单地向前看,新 View 是横向的,那么当你回来时,主视图也将是横向的。

无论如何,我已经为您构建了一个快速项目,这是您的 GitHub 链接:https://github.com/dombryan94/SetOrientationOfOtherViews

如果这就是您要找的,请告诉我,希望对您有所帮助!

关于ios - 在 UIViewController 上为 Swift 中的特定 View Controller 锁定方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30382397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com