在 SwiftUI 中,如何使用动态变化的滚动区域来缩放 scrollView 中的内容?

In SwiftUI, how to scale content inside scrollView with dynamic changing scrolling area?

我正在使用 SwiftUI 开发 MacOS 应用程序。

假设我们有一个固定大小 window,它将显示一个可滚动的图像。 现在我想创建一个功能,可以让用户缩放图像,并可以在 window.

中滚动和查看缩放后的图像

问题是,当我放大图片后,滚动区域似乎没有一起展开,滚动区域不够大,无法到达图片的每个角落。

struct ContentView: View {
    var body: some View {
        ScrollView([.horizontal, .vertical] , showsIndicators: true ){
            Image("test")
                .scaleEffect(2)
        }
        .frame(width: 500, height: 500)
    }
}

我尝试使用 GeometryReader 设置图像的框架,但得到了相同的结果。

MacOS 11.1,Xcode12.3

谢谢!

.scaleEffect 似乎在不影响其框架的情况下对视图执行视觉转换,因此 ScrollView 不知道要容纳更大的尺寸。

图片上的

.resizable().frame 似乎可以解决问题:

struct ContentView: View {
    @State private var scale : CGFloat = 1.0
    
    var body: some View {
        VStack {
            ScrollView([.horizontal, .vertical] , showsIndicators: true ){
                Image(systemName: "plus.circle")
                    .resizable()
                    .frame(width: 300 * scale,height: 300 * scale)
            }
            .frame(width: 500, height: 500)
            Slider(value: $scale, in: (0...5))
        }
    }
}