我是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)
}
}
magnifyBy =值
抛出一个错误:
无法分配给属性:“magnifyBy”是仅获取属性
我该怎么做才能解决此问题?
最佳答案
手势处于 Activity 状态时,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)
}
}
请在Apple官方文章Adding Interactivity with Gestures中查看有关
GestureState
的详细信息。当文档充实且良好时,这种罕见的情况。
关于ios - 如何为“Get-Only”变量赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60243472/