gpt4 book ai didi

SwiftUI DragGesture() 在屏幕上获取开始位置

转载 作者:行者123 更新时间:2023-12-05 01:06:15 27 4
gpt4 key购买 nike

我想让一个 View “可滑动”,但是这个 View 只覆盖了整个屏幕的一小部分。正在做:

var body: some View {

ZStack {
Text("ABC")
.gesture(DragGesture().onChanged(onChanged))
}
}

func onChanged(value: DragGesture.Value) {
print(value.startLocation)
print("onChanged", value.location)
}

给我用户滑动的相对值 - 但是,在不知道 View 的确切位置的情况下,我无法知道用户在屏幕上的触摸位置。

换句话说,当 Text 位于屏幕中央时,一直到右边缘会得到 200px。但是假设文本向左移动,那么它将接近 400。我尝试在 ZStack 上放置另一个手势以保存初始值,但看起来你不能在彼此之间有多个手势。

无论文本在哪里,如何让监听器转换值,使左边缘为 0,右边缘为 displayWidth(以 px 为单位)?

最佳答案

您可以利用坐标空间,并将其与 DragGesture 一起使用。

代码:

struct ContentView: View {
@State private var location: CGPoint = .zero

var body: some View {
VStack(spacing: 30) {
Text("ABC")
.background(Color.red)
.gesture(
DragGesture(coordinateSpace: .named("screen")).onChanged(onChanged)
)

Text("Location: (\(location.x), \(location.y))")
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.coordinateSpace(name: "screen")
}

private func onChanged(value: DragGesture.Value) {
location = value.location
}
}

关于SwiftUI DragGesture() 在屏幕上获取开始位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69500979/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com