SwiftUI DragGesture() 获取屏幕上的开始位置
SwiftUI DragGesture() get start location on screen
我想让一个视图“可滑动”,但是这个视图只覆盖了整个屏幕的一小部分。正在做:
var body: some View {
ZStack {
Text("ABC")
.gesture(DragGesture().onChanged(onChanged))
}
}
func onChanged(value: DragGesture.Value) {
print(value.startLocation)
print("onChanged", value.location)
}
为我提供用户滑动位置的相对值 - 但是,在不知道视图的确切位置的情况下,我无法知道用户在屏幕上的触摸位置。
换句话说,当Text
位于屏幕中央时,一直到右边缘为200px。但是假设文本向左移动,那么它将接近 400。我尝试在 ZStack 上放置另一个手势以保存初始值,但是看起来你不能在彼此之间有多个手势。
如何让侦听器转换值,使左边缘为 0,右边缘为以像素为单位的 displayWidth,而不管文本在哪里?
您可以利用坐标空间,并将其用于 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
}
}
我想让一个视图“可滑动”,但是这个视图只覆盖了整个屏幕的一小部分。正在做:
var body: some View {
ZStack {
Text("ABC")
.gesture(DragGesture().onChanged(onChanged))
}
}
func onChanged(value: DragGesture.Value) {
print(value.startLocation)
print("onChanged", value.location)
}
为我提供用户滑动位置的相对值 - 但是,在不知道视图的确切位置的情况下,我无法知道用户在屏幕上的触摸位置。
换句话说,当Text
位于屏幕中央时,一直到右边缘为200px。但是假设文本向左移动,那么它将接近 400。我尝试在 ZStack 上放置另一个手势以保存初始值,但是看起来你不能在彼此之间有多个手势。
如何让侦听器转换值,使左边缘为 0,右边缘为以像素为单位的 displayWidth,而不管文本在哪里?
您可以利用坐标空间,并将其用于 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
}
}