我在 SwiftUI 中遇到了与下面相同的问题。
我想我可以通过给
anchor
参数两个手指的中心坐标来解决这个问题。
但我不知道如何到达中心。我的代码:
scaleEffect
参考:https://stackoverflow.com/a/58468234/1979953
import SwiftUI
struct MagnificationGestureView: View {
@State var scale: CGFloat = 1.0
@State var lastScaleValue: CGFloat = 1.0
var body: some View {
Image(
systemName: "photo"
)
.resizable()
.frame(
width: 100,
height: 100
)
.scaleEffect(
self.scale
//, anchor: <---- give: the two fingers center position
)
.gesture(
magnification
)
}
var magnification: some Gesture {
// Can I get the center of the pinch?
MagnificationGesture().onChanged { val in
let delta = val / self.lastScaleValue
self.lastScaleValue = val
self.scale = self.scale * delta
}.onEnded { _ in
self.lastScaleValue = 1.0
}
}
}
作为
MagnifyGesture
的替代品。它传递给 MagnificationGesture
闭包的值是一个结构体,其中包含
onChanged
以及预期的 startAnchor: UnitPoint
。您可以将该锚点传递给 magnification: CGFloat
函数。