当前位置: 首页 > 知识库问答 >
问题:

即使用户打开纵向方向锁,如何水平旋转设备

赵正雅
2023-03-14

我想知道如何旋转设备,即使用户在iPhone打开肖像方向锁定。就像亚马逊黄金视频应用程序一样,通常我看到应用程序是竖屏的,但是当我开始看电影时,即使我打开肖像方向锁定,应用程序也会将其旋转变为水平。

当我在谷歌上搜索时,我只找到了这篇文章,但使用CoreMotion是实现我想要做的事情的唯一方法??

我使用以下代码从本文中旋转设备,

struct AppUtility {

    static func lockOrientation(_ orientation: UIInterfaceOrientationMask) {

        if let delegate = UIApplication.shared.delegate as? AppDelegate {
            delegate.orientationLock = orientation
        }
    }

    /// OPTIONAL Added method to adjust lock and rotate to the desired orientation
    static func lockOrientation(_ orientation: UIInterfaceOrientationMask, andRotateTo rotateOrientation:UIInterfaceOrientation) {

        self.lockOrientation(orientation)

        UIDevice.current.setValue(rotateOrientation.rawValue, forKey: "orientation")
        UINavigationController.attemptRotationToDeviceOrientation()
    }

}

但该应用程序不会自动从纵向旋转到横向(从横向到纵向工作...),但当我用手将设备从纵向旋转到横向时,应用程序的视图会旋转。

那么,当我进入特定的视图控制器时,如何使设备旋转到横向?(就像prime视频应用程序一样,当我开始看电影时,会自动将方向转向横向)

共有1个答案

左丘楷
2023-03-14

在AppServer下面的变量中锁定所有具有给定方向的控制器

var orientationLock  = UIInterfaceOrientationMask.portrait

现在在AppDelegate中实现以下方法

    func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    return self.orientationLock
}

在单独的助手文件中写入这些方法

    static func lockOrientation(_ orientation: UIInterfaceOrientationMask) {
    if let delegate = UIApplication.shared.delegate as? AppDelegate {
        delegate.orientationLock = orientation
    }
}

static func lockOrientation(_ orientation: UIInterfaceOrientationMask, andRotateTo rotateOrientation:UIInterfaceOrientation) {
    lockOrientation(orientation)
    UIDevice.current.setValue(rotateOrientation.rawValue, forKey: LocalizedKey.orientation.string)
}

在特定控制器的viewWillAppear()中调用此方法

    override func viewWillAppear(_ animated: Bool) {
    Helpers.lockOrientation(UIInterfaceOrientationMask.landscape,
                            andRotateTo: UIInterfaceOrientation.landscapeLeft)
}

注意:LocalizedKey.orientation.raw值是单独文件中的字符串,其值为“方向”

 类似资料:
  • setPrintedPortrait(): self 实例 $config = ['path' => './tests']; $excel = new \Vtiful\Kernel\Excel($config); ​ $excel->fileName('printed_portrait.xlsx', 'sheet1') ->setPrintedPortrait() // 设置打印方向为

  • 我正在开发一个Android相机api应用程序,它被锁定在清单文件的竖屏中。 我的问题是,当我存储图片时,它们都以相同的方向存储。 我希望它们以真实的方向存储,例如,我的天花板应该位于存储图片的顶部,无论我如何定位手机,如果这有意义的话 为了做到这一点,我必须知道设备的方向,然而,当应用程序锁定在纵向时,所有getOrientation的方法都认为我的手机处于纵向模式,无论我手机的物理方向如何。

  • 我不希望我的应用程序被美化并始终是porttrait。所以我让我的应用程序部署信息仅设置纵向。但是当我需要在我的应用程序中显示任何图像或视频时,我需要横向模式才能更好地显示。 我可以通过检测设备方向的变化 但是,即使应用程序部署信息肖像被锁定,我如何手动更改设备方向? 这不起作用

  • 我正在构建一个应用程序,它依赖于显示从相机拍摄的许多位图图像。我希望所有图像都以90度(纵向)的方向显示,我知道如何使用每个图像提供的EXIF信息来实现这一点。在拍摄图像后立即旋转图像的位图以满足我的需要,然后将其发送到我的服务器,这对我来说是一个更好的主意,还是应该在不旋转图像的情况下将图像发送到我的服务器,然后每当我下拉图像时,使用图像附带的EXIF旋转来旋转我正在显示的图像视图?我需要一个高

  • setPrintedLandscape(): self 实例 $config = ['path' => './tests']; $excel = new \Vtiful\Kernel\Excel($config); ​ $excel->fileName('printed_landscape.xlsx', 'sheet1') ->setPrintedLandscape() // 设置打印

  • 背景 我正在尝试使用LWJGL 3.0在Java中创建一个FPS游戏。我已经设置了一个camera类,它具有俯仰和偏航(roll未被使用)。相机本身扩展实体,因为它有一个模型。无论相机指向哪里,我都希望这个模型始终显示在相机的“前方”。每个实体都有一个方法getTransformationMatrix(),该方法返回一个矩阵4f,然后将其传递到实体着色器。 问题 模型需要指向相机的方向,以及围绕相