SwiftUI禁用视图的自动旋转

SwiftUI禁用视图的自动旋转,swiftui,screen-orientation,device-orientation,Swiftui,Screen Orientation,Device Orientation,我有一个SwiftUI应用程序,它应该支持横向和纵向。但是,我希望看到Camera.app在iOS中的行为。当设备旋转时,切换横向/纵向时,仅按钮旋转,所有其他内容保持原样 所以我想禁用某些视图的自动旋转,并启用某些视图的旋转。不知道如何实现它 struct ContentView: View { var view: some View { HStack { Text("Hello") // Don't rotate Text("W

我有一个SwiftUI应用程序,它应该支持横向和纵向。但是,我希望看到Camera.app在iOS中的行为。当设备旋转时,切换横向/纵向时,仅按钮旋转,所有其他内容保持原样

所以我想禁用某些视图的自动旋转,并启用某些视图的旋转。不知道如何实现它

struct ContentView: View {
   var view: some View {
       HStack {
           Text("Hello") // Don't rotate
           Text("World") // Rotate
       }
   }
}
理论上,我试图检测旋转并在旋转设备时旋转“Hello”文本

我已经尝试使用link_2,并更改了一些代码,如下所示:

场景公使中

func windowScene(_ windowScene: UIWindowScene, didUpdate previousCoordinateSpace: UICoordinateSpace, interfaceOrientation previousInterfaceOrientation: UIInterfaceOrientation, traitCollection previousTraitCollection: UITraitCollection) {
        switch windowScene.interfaceOrientation {
        case .landscapeLeft:
            model.angel = 90
        case .landscapeRight:
            model.angel = -90
        case .portraitUpsideDown:
            model.angel = 180
        default:
            model.angel = 0
        }
    }
class Model: ObservableObject {
    let objectWillChange = ObservableObjectPublisher()

    var angel: Double = 0 { willSet { objectWillChange.send() } }
}
struct ContentView: View {
    @EnvironmentObject var model: Model

    var body: some View {
        HStack {
            Text("Hello")
                .rotationEffect(Angle(degrees: model.angel))
            Text("World")
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
模型中

func windowScene(_ windowScene: UIWindowScene, didUpdate previousCoordinateSpace: UICoordinateSpace, interfaceOrientation previousInterfaceOrientation: UIInterfaceOrientation, traitCollection previousTraitCollection: UITraitCollection) {
        switch windowScene.interfaceOrientation {
        case .landscapeLeft:
            model.angel = 90
        case .landscapeRight:
            model.angel = -90
        case .portraitUpsideDown:
            model.angel = 180
        default:
            model.angel = 0
        }
    }
class Model: ObservableObject {
    let objectWillChange = ObservableObjectPublisher()

    var angel: Double = 0 { willSet { objectWillChange.send() } }
}
struct ContentView: View {
    @EnvironmentObject var model: Model

    var body: some View {
        HStack {
            Text("Hello")
                .rotationEffect(Angle(degrees: model.angel))
            Text("World")
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
内容视图中

func windowScene(_ windowScene: UIWindowScene, didUpdate previousCoordinateSpace: UICoordinateSpace, interfaceOrientation previousInterfaceOrientation: UIInterfaceOrientation, traitCollection previousTraitCollection: UITraitCollection) {
        switch windowScene.interfaceOrientation {
        case .landscapeLeft:
            model.angel = 90
        case .landscapeRight:
            model.angel = -90
        case .portraitUpsideDown:
            model.angel = 180
        default:
            model.angel = 0
        }
    }
class Model: ObservableObject {
    let objectWillChange = ObservableObjectPublisher()

    var angel: Double = 0 { willSet { objectWillChange.send() } }
}
struct ContentView: View {
    @EnvironmentObject var model: Model

    var body: some View {
        HStack {
            Text("Hello")
                .rotationEffect(Angle(degrees: model.angel))
            Text("World")
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

希望这有帮助

感谢您的回答,但这也会旋转
文本(“世界”)
。。。我正在寻找一种禁用自动旋转的方法。@PeterWarbo,嗯?作为您的注释代码,我看到您期望的是旋转
文本(“世界”)
。我的想法是检测旋转和旋转预期的项目不旋转。新的SwiftUI模板没有委托。