我是 Swift 和 SwiftUI 的新手。目前,当用户进行缩放时,图像会在完成后返回到常规位置。我希望拥有它,以便当用户停止放大图片时,它会保持放大状态。
struct ContentView: View {
@GestureState var magnifyBy = CGFloat(1.0)
@State var zoomIn = CGFloat(1.0)
var magnification: some Gesture {
MagnificationGesture()
.updating($magnifyBy) { currentState, gestureState, transaction in
gestureState = currentState
}.onEnded{value in
magnifyBy = value
}
}
var body: some View {
Circle()
.frame(width: 100 * magnifyBy,
height: 100 * magnifyBy,
alignment: .center)
}
}
Run Code Online (Sandbox Code Playgroud)
放大倍数 = 值
引发错误: 无法分配给属性:“magnifyBy”是仅获取属性
我可以做什么来解决这个问题?
GestureState当手势处于活动状态时处于活动状态,并且必须仅在该时间范围内使用,并相应更新。手势完成后,相应的手势状态将重置为初始值。因此,为了使更改持久,我们需要单独存储它。
这是可能的方法(经过测试并适用于 Xcode 11.2 / iOS 13.2)
struct ContentView: View {
@GestureState var magnifyBy = CGFloat(1.0)
@State var zoomIn = CGFloat(1.0)
var magnification: some Gesture {
MagnificationGesture()
.updating($magnifyBy) { value, gestureState, transaction in
gestureState = value // gestureState is magnifyBy
}.onEnded{ value in
self.zoomIn *= value // < preserve last changes
}
}
var body: some View {
Circle()
.frame(width: 100 * magnifyBy * zoomIn, //after onEnded magnifyBy=1 again
height: 100 * magnifyBy * zoomIn,
alignment: .center)
.gesture(magnification)
}
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息GestureState,请参阅 Apple 官方文章“通过手势添加交互性”。文档完整且良好的情况很少见。
| 归档时间: |
|
| 查看次数: |
894 次 |
| 最近记录: |