将 VStack 的位置保存在 @State 私有变量中
Posted
技术标签:
【中文标题】将 VStack 的位置保存在 @State 私有变量中【英文标题】:save the position of a VStack in a @State private var 【发布时间】:2020-09-07 05:56:02 【问题描述】:是否可以获取保存在@State 私有变量中的 VStack 视图的位置,以便能够在拖动手势移动后将 VStack 重置到该位置? 我没有任何代码,我用几何阅读器尝试的一切都失败了。 谢谢
【问题讨论】:
【参考方案1】:嗯,最后在第 17 章被 AppCoda 的 Simon NG 解决了 理解他的优秀教程 Mastering-SwiftUI 的手势。 非常感谢您,Simon!
要使视图停留在拖动结束时使用:
struct ContentView: View
// drag gesture,remain at end position
@GestureState private var dragOffset = CGSize.zero
@State private var position = CGSize.zero
var body: some View
Image(systemName: "star.circle.fill")
.font(.system(size: 100))
.offset(x: position.width + dragOffset.width, y: position.height + dragOffset.height)
.animation(.easeInOut)
.foregroundColor(.green)
.gesture(
DragGesture()
.updating($dragOffset, body: (value, state, transaction) in
state = value.translation
)
.onEnded( (value) in
self.position.height += value.translation.height
self.position.width += value.translation.width
)
)
让它回到原来的位置使用:
struct ContentView4: View
// drag gesture,return to start position
@GestureState private var dragOffset = CGSize.zero
var body: some View
Image(systemName: "star.circle.fill")
.font(.system(size: 100))
.offset(x: dragOffset.width, y: dragOffset.height)
.animation(.easeInOut)
.foregroundColor(.green)
.gesture(
DragGesture()
.updating($dragOffset, body: (value, state, transaction) in
state = value.translation
)
)
【讨论】:
以上是关于将 VStack 的位置保存在 @State 私有变量中的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS Widgets 中,是不是必须将只读数据标记为 @State?