gpt4 book ai didi

android - SwiftUI 按钮操作,如 Android ACTION_DOWN 和 ACTION_UP

转载 作者:行者123 更新时间:2023-12-01 21:42:13 28 4
gpt4 key购买 nike

我正在创建一个 iOS 版本的 Android 应用程序,我需要创建一个按钮,在用户第一次按下时执行一项任务,然后在用户停止按下按钮时执行一项任务。在 Java 中,我使用以下代码执行此操作:

someButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Do first task
} else if (event.getAction() == MotionEvent.ACTION_UP) {
// Do second task
}
return true;
}
});

我将如何使用 SwiftUI 按钮执行此操作?我找到了 this answer这告诉了如何获得 ACTION_DOWN 行为,但我不确定这种方法是否有效,因为我需要同时拥有 ACTION_UP 和 ACTION_DOWN。

最佳答案

这是作为 View 修饰符的替代(更可靠)解决方案,因此可以附加到任何不通过状态更新影响其他 View 的 View 。

使用 Xcode 11.4/iOS 13.4 测试。

struct DemoTouchesHandling: View {

var body: some View {
VStack {
Text("Tap Me!").font(Font.system(size: 24).bold().smallCaps())
}
.frame(width: 200, height: 200)
.background(Color.red)
.modifier(TouchUpDownHandler(downAction: {print("> Down")},
upAction: {print("< Up")}))
}
}

struct TouchUpDownHandler: ViewModifier {
var downAction: (() -> Void)?
var upAction: (() -> Void)?

enum TouchState {
case inactive
case down
}
@GestureState private var gestureState: TouchState = .inactive // initial & reset value

func body(content: Content) -> some View {
content
.gesture(DragGesture(minimumDistance: 0)
.updating($gestureState, body: { (value, state, transaction) in
switch state {
case .inactive:
state = .down
self.downAction?()
case .down: break
}
})
.onEnded { value in
self.upAction?()
}
)
}
}

关于android - SwiftUI 按钮操作,如 Android ACTION_DOWN 和 ACTION_UP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62462814/

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