SwiftUI:如何在没有 AppDelegate 的情况下强制横向

2024-04-22

我正在制作带有视频播放器的应用程序,除了这个视频播放器之外,我的整个结构仅用于纵向视图。我想仅为该视图启用横向旋转。但我查过很多论坛,每个答案都是向 App Delegate 添加一些代码,但我没有。那我能做什么呢。


这是给您的演示。您可以通过调用该函数将方向更改为您喜欢的方向changeOrientation。您还可以在完成后反转方向更改,使用.onReceive. The .onReceive每次方向发生变化时都会被调用,因此您可以反转您不喜欢的方向变化。
我知道这不是最佳的,但这是我在不使用大量 UIKit 和 AppDelegate 的情况下能找到的最好的。您可以使用 AppDelegate 获得更好的结果(我认为)。

import SwiftUI
import UIKit

struct ContentView: View {
    
    private let rotationChangePublisher = NotificationCenter.default
        .publisher(for: UIDevice.orientationDidChangeNotification)
    @State private var isOrientationLocked = false
    
    var body: some View {
        VStack {
            Button("Change orientation") {
                if UIDevice.current.orientation.isPortrait {
                    changeOrientation(to: .landscapeLeft)
                } else {
                    changeOrientation(to: .portrait)
                }
            }.padding()
            
            Button("Orientation is \(isOrientationLocked ? "" : "NOT ")Locked to portrait-only") {
                isOrientationLocked.toggle()
            }.padding()
        }
        .font(.system(size: 17, weight: .semibold))
        .onReceive(rotationChangePublisher) { _ in
            // This is called when there is a orientation change
            // You can set back the orientation to the one you like even
            // if the user has turned around their phone to use another
            // orientation.
            if isOrientationLocked {
                changeOrientation(to: .portrait)
            }
        }
    }
    
    func changeOrientation(to orientation: UIInterfaceOrientation) {
        // tell the app to change the orientation
        UIDevice.current.setValue(orientation.rawValue, forKey: "orientation")
        print("Changing to", orientation.isPortrait ? "Portrait" : "Landscape")
    }
}

另外,请确保事先允许您想要使用的不同方向:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI:如何在没有 AppDelegate 的情况下强制横向 的相关文章

随机推荐

  • Visual Studio 中的解决方案文件夹是什么?

    我有一个 Visual Studio 2008 解决方案 我想在解决方案中包含一个真实的文件夹 但不是在项目级别 而是在解决方案级别 我注意到您可以右键单击该解决方案并添加一个解决方案文件夹 但它显示为一些白色文件夹 我怀疑它到底应该是什么
  • Swift 中 CGImage 的 RGB 数据

    我尝试过培养阅读能力RGB 像素数据 https stackoverflow com questions 6073259 getting rgb pixel data from cgimage在斯威夫特 获取基本图像信息没有问题 但我认为指
  • 将系列列表传递给 SetSeries

    我将 DotNet Highcharts 与 Visual Studio 2010 结合使用 我创建了一个系列数组 List
  • {} while(0) 在宏中如何工作?

    尽管这个话题已经在本论坛和所有其他论坛上讨论过很多次 但我仍然心存疑虑 请帮忙 如何do while 0 Linux内核中的宏工作 例如 define preempt disable do while 0 它如何禁用抢占 define mi
  • 尝试使用 Razor 引擎解析模板时,程序集“mscorlib”中的“System.Security.Principal.WindowsImpersonationContext”错误

    我必须创建一个能够发送电子邮件的 Asp Net Web Api 我成功发送了电子邮件 但仅使用存储在本地变量中的简单模板 下一步是从外部文件渲染模板 如下所示 string filePath C Data EmailClient Emai
  • 远程执行hadoop作业时出现异常

    我正在尝试在远程 hadoop 集群上执行 Hadoop 作业 下面是我的代码 Configuration conf new Configuration conf set fs default name hdfs server 9000 c
  • 使用 RCurl 登录 mediawiki

    我如何使用 RCurl 或 Curl 我可以将其适应 R 包 登录到 mediawiki 我只想解析一个页面 但我需要登录 否则我无法访问它 Mediawiki API 有一个登录函数 它返回 cookie 和令牌 您必须保存并将两者发送回
  • mscordacwks.dll 和 mscorwks.dll 混淆

    mscordacwks dll 和 mscorwks dll 在 Net Framework 运行时 构建和调试过程中执行哪些不同的功能 有关于这个主题的推荐读物吗 我已经搜索了很长一段时间但失败了 提前致谢 乔治 mscorwks 是主要
  • 如何在 Node.js 中使用模板(把手或任何替代方案)而不使用框架(ex = express)?

    例如 我有这个 JSON 文档 foo json foo bar Hello World bar The End 在 Node js 中 我想使用模板 handlebars 或任何模板 从 JSON 文档生成字符串 例如 p Hello W
  • 连接 WCF 客户端缓存?

    我的应用程序使用客户端企业缓存 我想避免为每个可缓存调用编写代码 并想知道是否有一种解决方案可以缓存 WCF 客户端调用 即使对于异步调用也是如此 这可以通过 WCF 行为 或其他方式来完成吗 代码示例 前几天 我使用 WCF 服务客户端
  • JavaScript作用域问题

    我正在调用此函数 将结果分配给回调中的变量 然后记录结果 但我一直未定义 var id test getID function result id result console log id 如果我将其更改为下面的代码 那么我可以看到记录的
  • Pipenv shell 无法创建虚拟环境

    我正在尝试使用运行 Django 项目pipenv shell 但是当我输入命令时pipenv shell 它失败 pipenv shell Creating a virtualenv for this project Pipfile Us
  • 如何实现帧破坏器?

    我正在寻找一个指南 描述如何实现一个工作框架破坏者 该框架还可以处理浏览器中没有激活 JS 的人 I read 这个问题很好 https stackoverflow com questions 958997但我绝对对 自己不要这样做 或 也
  • 使用 RequireJS 时如何从 CDN 加载第三方 JavaScript?

    我一直在使用 RequireJS 进行依赖管理 并且必须说我喜欢它 JavaScript 最近确实已经成熟了 然而 我无法弄清楚的一件事是 当使用优化器将所有 JavaScript 模块捆绑到一个文件中时 如何才能继续从外部 CDN URL
  • 在 HDP 2.2 上运行 Spark Streaming 作业时出现 NoSuchMethodError

    我正在尝试在 HDP 2 2 Sandbox 上运行简单的流作业 但面临 java lang NoSuchMethodError 错误 我可以在这台机器上运行 SparkPi 示例 没有任何问题 以下是我正在使用的版本
  • 不使用 Numpy 的矩阵求逆

    我想在不使用的情况下反转矩阵numpy linalg inv 原因是我使用 Numba 来加速代码 但不支持 numpy linalg inv 所以我想知道是否可以使用 经典 Python 代码反转矩阵 With numpy linalg
  • Array.sort() 在 Firefox 和 Chrome/Edge 中的行为不同[重复]

    这个问题在这里已经有答案了 我有这段极其简化的代码 它在 Firefox 中产生的结果与您在 Chrome 或 Edge 中获得 和期望 的结果相反 尚未尝试过其他浏览器 1 2 3 4 5 sort a b gt 1 forEach a
  • 错误:(26, 13) 无法解析:com.android.support:appcompat-v7:25.0.1

    错误 26 13 无法解析 com android support appcompat v7 25 0 1错误 23 24 无法解析 com android support test espresso espresso core 2 0 这
  • grid.arrange 错误:输入必须是 grobs

    我有以下 R 脚本 library ggplot2 library gridExtra Sys setenv LANG en c1 lt ggplot mtcars aes factor cyl geom bar c2 lt ggplot
  • SwiftUI:如何在没有 AppDelegate 的情况下强制横向

    我正在制作带有视频播放器的应用程序 除了这个视频播放器之外 我的整个结构仅用于纵向视图 我想仅为该视图启用横向旋转 但我查过很多论坛 每个答案都是向 App Delegate 添加一些代码 但我没有 那我能做什么呢 这是给您的演示 您可以通