gpt4 book ai didi

swift - 您如何检测没有移动或持续时间的 SwiftUI touchDown 事件?

转载 作者:行者123 更新时间:2023-12-01 15:19:11 25 4
gpt4 key购买 nike

我试图检测手指何时第一次接触 SwiftUI 中的 View 。我可以用 UIKit Events 很容易地做到这一点,但在 SwiftUI 中无法解决这个问题。
我已经尝试了最小移动为 0 的 DragGesture,但在您的手指移动之前它仍然不会改变。
TapGesture 仅在您抬起手指时才起作用,并且无论我将参数设置为什么,LongPressGesture 都不会足够快地触发。

DragGesture(minimumDistance: 0, coordinateSpace: .local).onChanged({ _ in print("down")})

LongPressGesture(minimumDuration: 0.01, maximumDistance: 100).onEnded({_ in print("down")})
我想在手指与 View 接触后立即检测 touchDown 事件。 Apple 的默认手势对距离或时间都有限制。
更新:这不再是问题,因为 Apple 似乎更新了 DragGesture 的工作方式,或者我可能遇到了特定的上下文错误。

最佳答案

您可以使用 .updating修改器是这样的:

struct TapTestView: View {

@GestureState private var isTapped = false

var body: some View {

let tap = DragGesture(minimumDistance: 0)
.updating($isTapped) { (_, isTapped, _) in
isTapped = true
}

return Text("Tap me!")
.foregroundColor(isTapped ? .red: .black)
.gesture(tap)
}
}

一些注意事项:
  • 零最小距离确保立即识别手势
  • @GestureState属性包装器在手势结束时自动将其值重置为原始值。这样你只需要担心设置isTappedtrue .它将自动为 false互动结束时再次。
  • updating修饰符有一个带有三个参数的奇怪闭包。在这种情况下,我们只对中间的感兴趣。这是一个 inout GestureState 的包装值的参数,所以我们可以在这里设置。第一个参数是手势的当前值;第三个是 Transaction包含一些动画上下文。
  • 关于swift - 您如何检测没有移动或持续时间的 SwiftUI touchDown 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58784684/

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