SwiftUI禁用视图的自动旋转

4

我有一个SwiftUI应用程序,需要支持横屏和竖屏。然而,我希望它能像iOS中的Camera.app一样运行。当设备旋转时,只有按钮被旋转,其余所有内容都保持不变。

因此,我想禁用某些视图的自动旋转,并为某些视图启用旋转。但不确定如何实现。

struct ContentView: View {
   var view: some View {
       HStack {
           Text("Hello") // Don't rotate
           Text("World") // Rotate
       }
   }
}
1个回答

2
理论上,我尝试使用这里_1这里_2来检测旋转并在设备旋转时旋转“ Hello”文本。
我已经尝试使用link_2,并将代码稍作更改,如下所示:
SceneDelegate中:
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() } }
}

ContentView 中:
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()
    }
}

希望这可以帮到您!

谢谢你的回答,但那也会旋转 Text("World") ... 我正在寻找一种禁用自动旋转的方法。 - Peter Warbo
@PeterWarbo 嗯?根据您的评论代码,我看到您期望旋转“Text(“World”)”。我的想法是检测旋转并旋转期望旋转的项目不要旋转 - Trai Nguyen
很遗憾,新的SwiftUI模板没有委托。 - Duck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接