我想在开始按下按钮时执行一个操作,然后在停止按下按钮时执行一个操作。我一直在寻找一个简单的解决方案,但遇到了更复杂的配置。我从BlueSpud获得的一个选项非常简单且接近。按钮操作未使用,所以我尝试:
struct MyView: View {
@State private var pressing = false
var body: some View {
Text("Button")
.background(self.pressing ? Color.red : Color.blue)
.gesture(DragGesture(minimumDistance: 0.0)
.onChanged { _ in
self.pressing = true
print("Pressing started and/or ongoing")
}
.onEnded { _ in
self.pressing = false
print("Pressing ended")
})
}
}
Run Code Online (Sandbox Code Playgroud)
此代码的问题在于,如果您在按下时将手指拖出按钮区域,则 .onEnded 永远不会被调用,并且如果没有可靠的事件结束,该解决方案将不起作用。
我还尝试过 Apple 的编写 SwiftUI 手势的示例。它提供了对按下和未按下状态的非常一致的控制,但我似乎不知道在哪里插入我的动作:
struct PressedButton: View {
var startAction: ()->Void
var endAction: ()->Void
enum DragState {
case inactive
case pressing
case dragging(translation: CGSize) …Run Code Online (Sandbox Code Playgroud)