swift ui 中关于 .gesture(拖动手势)的问题
Question about .gesture(drag gesture) in swift ui
我正在尝试检测此文本视图何时被滑动。代码编译正常,但我无法在我的实际设备上触发滑动。当我滑动时,没有任何反应。 Tap 似乎工作得很好。谁能告诉我我的代码哪里做错了?
以防万一,我正在使用最新的 Xcode.
在 swift 5.3 中开发手表 OS 应用程序
var body: some View {
Text(tempstring).onTapGesture { checkStateRoll() }
.frame(maxWidth: .infinity, maxHeight: .infinity)
.gesture(DragGesture(minimumDistance: 10, coordinateSpace: .global)
.onEnded { value in
let horizontalAmount = value.translation.width as CGFloat
let verticalAmount = value.translation.height as CGFloat
if abs(horizontalAmount) > abs(verticalAmount) {
horizontalAmount < 0 ? leftswipe() : rightswipe()
} else {
verticalAmount < 0 ? upswipe() : downswipe()
}
tempstring = String(numdice) + "d" + String(typesofdice[typedice])
speaknumber()
} )
.background(progstate == 2 ? Color.blue : Color.red)
}
}
非常感谢您的帮助。这已经困扰我好几个星期了。
几件事:
- 关于布局,设置框架不会改变文本大小,因为文本本身会根据其内容调整大小。如果您想占用所有 space.
,请使用像 ZStack 这样的贪心视图
- 修饰符的顺序很重要。您阅读了它们从下到上的应用顺序,因此在这种情况下,它们需要进入堆栈。
这是一个游乐场示例:
import SwiftUI
import PlaygroundSupport
struct V: View {
var body: some View {
ZStack {
Color.red
Text("Test")
}
.onTapGesture { print("tap") }
.gesture(DragGesture(minimumDistance: 10, coordinateSpace: .global).onEnded { print([=10=])})
}
}
let host = UIHostingController(rootView: V().frame(width: 500.0, height: 500.0))
host.preferredContentSize = CGSize(width: 300, height: 300)
PlaygroundPage.current.liveView = host
我正在尝试检测此文本视图何时被滑动。代码编译正常,但我无法在我的实际设备上触发滑动。当我滑动时,没有任何反应。 Tap 似乎工作得很好。谁能告诉我我的代码哪里做错了?
以防万一,我正在使用最新的 Xcode.
在 swift 5.3 中开发手表 OS 应用程序var body: some View {
Text(tempstring).onTapGesture { checkStateRoll() }
.frame(maxWidth: .infinity, maxHeight: .infinity)
.gesture(DragGesture(minimumDistance: 10, coordinateSpace: .global)
.onEnded { value in
let horizontalAmount = value.translation.width as CGFloat
let verticalAmount = value.translation.height as CGFloat
if abs(horizontalAmount) > abs(verticalAmount) {
horizontalAmount < 0 ? leftswipe() : rightswipe()
} else {
verticalAmount < 0 ? upswipe() : downswipe()
}
tempstring = String(numdice) + "d" + String(typesofdice[typedice])
speaknumber()
} )
.background(progstate == 2 ? Color.blue : Color.red)
}
}
非常感谢您的帮助。这已经困扰我好几个星期了。
几件事:
- 关于布局,设置框架不会改变文本大小,因为文本本身会根据其内容调整大小。如果您想占用所有 space. ,请使用像 ZStack 这样的贪心视图
- 修饰符的顺序很重要。您阅读了它们从下到上的应用顺序,因此在这种情况下,它们需要进入堆栈。
这是一个游乐场示例:
import SwiftUI
import PlaygroundSupport
struct V: View {
var body: some View {
ZStack {
Color.red
Text("Test")
}
.onTapGesture { print("tap") }
.gesture(DragGesture(minimumDistance: 10, coordinateSpace: .global).onEnded { print([=10=])})
}
}
let host = UIHostingController(rootView: V().frame(width: 500.0, height: 500.0))
host.preferredContentSize = CGSize(width: 300, height: 300)
PlaygroundPage.current.liveView = host