2

我正在尝试制作一个控制计数器的按钮。如果你点击它,计数器会加一。但是如果你点击并按住它,我希望计数器在你按住它的同时每 n 秒增加一个,并一直这样做直到你放手。

如果我使用如下代码:

@GestureState var isDetectingLongPress = false
var plusLongPress: some Gesture {
    LongPressGesture(minimumDuration: 1)
        .updating($isDetectingLongPress) { currentstate, gestureState, _ in
            gestureState = currentstate
        }
        .onEnded { finished in
            print("LP: finished \(finished)")
        }
}

然后isDetectingLongPress在一秒钟后变为真,然后立即变为假。onEnded并且在 1 秒后也会调用print in 。

我想要一些方法来保持调用代码以在手指按下视图时不断更新计数器 - 而不仅仅是在检测到长按后一次。

4

1 回答 1

4

改用以下组合来跟踪连续按下

使用 Xcode 11.4 / iOS 13.4 测试

@GestureState var isLongPress = false // will be true till tap hold

var plusLongPress: some Gesture {
    LongPressGesture(minimumDuration: 1).sequenced(before:   
          DragGesture(minimumDistance: 0, coordinateSpace: 
          .local)).updating($isLongPress) { value, state, transaction in
            switch value {
                case .second(true, nil):
                    state = true
                   // side effect here if needed
                default:
                    break
            }
        }
}
于 2020-04-30T13:12:24.233 回答