如何在 SwiftUI 中放大 ScrollView

Luk*_*rse 9 swiftui

我正在尝试在 Catalyst 应用程序的 SwiftUI 中缩放和平移图像。\xc2\xa0没有 PanGesture,但 ScrollView 似乎在 iPad 和 Mac 上都能正常工作。\xc2\xa0 我只是无法滚动放大图像周围。\xc2\xa0\xc2\xa0

\n
struct TestScrollView: View {\n    @State var scale: CGFloat = 1.0\n    \n    var body: some View {\n        VStack {\n            ScrollView([.horizontal,.vertical], showsIndicators: false) {\n                    Image("image")\n                        .resizable()\n            }\n            .gesture(MagnificationGesture()\n            .onChanged({ (scale) in\n                self.scale = scale\n            }))\n                .scaleEffect(self.scale)\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

并使用以下代码...

\n
ScrollView([.horizontal,.vertical], showsIndicators: false) {\n    Image("large_image")\n        .resizable()\n        .gesture(MagnificationGesture()\n                    .onChanged({ (scale) in\n                        self.scale = scale\n                    }))\n        .scaleEffect(self.scale)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

...我明白了:

\n

测试视频

\n

它似乎向右滚动了很多,并且在左侧被切断。

\n

Kou*_*iga 8

应用后内容的框架大小似乎保持不变scaleEffect,这就是您无法在内部滚动的原因ScrollView。没有地方可以滚动。您可以通过在缩放后手动指定帧大小来解决该问题。如果不知道原始帧大小,可以使用GeometryReader动态缩放后计算帧大小。

ScrollView([.horizontal, .vertical], showsIndicators: false) {
    Image(systemName: "square.fill")
        .resizable()
        .frame(width: 200, height: 200)
        .scaleEffect(self.scale)
        .frame(
            width: 200 * self.scale,
            height: 200 * self.scale
        )
}
.gesture(magnificationGesture)
Run Code Online (Sandbox Code Playgroud)

另外,您MagnificationGestureonChanged实现存在一些问题。参考James的这个回答