我正在尝试在 Catalyst 应用程序的 SwiftUI 中缩放和平移图像。没有 PanGesture,但 ScrollView 似乎在 iPad 和 Mac 上都运行良好。我只是无法在放大的图像上滚动。
struct TestScrollView: View {
@State var scale: CGFloat = 1.0
var body: some View {
VStack {
ScrollView([.horizontal,.vertical], showsIndicators: false) {
Image("image")
.resizable()
}
.gesture(MagnificationGesture()
.onChanged({ (scale) in
self.scale = scale
}))
.scaleEffect(self.scale)
}
}
}
并使用以下代码...
ScrollView([.horizontal,.vertical], showsIndicators: false) {
Image("large_image")
.resizable()
.gesture(MagnificationGesture()
.onChanged({ (scale) in
self.scale = scale
}))
.scaleEffect(self.scale)
}
...我明白了:
它似乎向右滚动了很多,并且在左侧被切断。
应用后内容的框架大小似乎保持不变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)
另外,你的MagnificationGesture
's onChanged
实施上存在一些问题。参考这个答案 https://stackoverflow.com/questions/58341820/isnt-there-an-easy-way-to-pinch-to-zoom-in-an-image-in-swiftui/58468234#58468234由詹姆斯.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)