我们如何在SwiftUI中找到iPad的方向,自动获取通知或通过功能获取更新?

我们如何在SwiftUI中找到iPad的方向,自动获取通知或通过功能获取更新?,swiftui,swiftui-environment,Swiftui,Swiftui Environment,我想在用户改变iPad方向时得到通知。在UIKit中,这很容易,但我不知道如何使用SwiftUI获取这些信息?您可以尝试: UIApplication.shared.windows.first?.windowScene?.interfaceOrientation.isLandscape ?? false 或: 如果要检测通知,可以收听UIDevice.orientationIDChangeNotification: UIDevice.current.beginGeneratingDeviceO

我想在用户改变iPad方向时得到通知。在UIKit中,这很容易,但我不知道如何使用SwiftUI获取这些信息?

您可以尝试:

UIApplication.shared.windows.first?.windowScene?.interfaceOrientation.isLandscape ?? false
或:

如果要检测通知,可以收听
UIDevice.orientationIDChangeNotification

UIDevice.current.beginGeneratingDeviceOrientationNotifications()
...
.onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { ... }

下面是一个演示:

@main
struct TestApp: App {
    init() {
        UIDevice.current.beginGeneratingDeviceOrientationNotifications()
    }

    var body: some Scene {
        WindowGroup {
            Text("Test")
                .onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in
                    print(UIApplication.shared.windows.first?.windowScene?.interfaceOrientation.isLandscape ?? false)
                }
        }
    }
}

是的,我知道,但这不是自动的,我如何才能得到通知?谢谢,这是工作!唯一的问题是应用程序午餐不起作用,午餐后我们应该改变方向以获得通知。我们如何从午餐中得到通知?@Omid它对我有效,而不改变方向(Xcode 12.0.1)。@Omid在我的回答中添加了一个演示。谢谢。收到后,我们使用了不同的代码:我使用的是:UIDevice.current.orientation.isLandscape,你的代码从午餐开始有效我不!,为什么?
@main
struct TestApp: App {
    init() {
        UIDevice.current.beginGeneratingDeviceOrientationNotifications()
    }

    var body: some Scene {
        WindowGroup {
            Text("Test")
                .onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in
                    print(UIApplication.shared.windows.first?.windowScene?.interfaceOrientation.isLandscape ?? false)
                }
        }
    }
}