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