【发布时间】:2021-10-14 01:03:42
【问题描述】:
我想在ZStack 中拖动一个视图。在此示例代码中,Toolbar 有一个蓝色的可拖动区域。通过设置offset,它应该在屏幕上移动Toolbar。相反,它进入了一个无限循环。怎么固定才能正确拖动?
它永远打印以下内容:
更改(36.5、27.0)
改变了 (0.0, 0.0)
extension CGPoint {
func toSize() -> CGSize { .init(width:x, height:y) }
}
struct ContentView: View {
@State var offset: CGSize = .zero
var body: some View {
ZStack(alignment: .topLeading) {
Toolbar(dragOffset: $offset)
.offset(offset)
Text(verbatim: "Offset: \(offset)")
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
}
struct Toolbar: View {
@Binding var dragOffset: CGSize
var body: some View {
HStack {
Color.blue.frame(width: 40, height: 40)
.gesture(drag)
Color.green.frame(width: 40, height: 40)
Color.red.frame(width: 40, height: 40)
}
}
var drag: some Gesture {
DragGesture()
.onChanged { value in
print("changed \(value.location)")
dragOffset = value.location.toSize()
}
.onEnded { value in
print("ended")
}
}
}
【问题讨论】:
标签: swiftui