ios 如何制作SwiftUI笔势以在按下视图时保持代码运行

eh57zj3b  于 2022-11-26  发布在  iOS
关注(0)|答案(2)|浏览(113)

我想做一个控制计数器的按钮。如果你点击它,计数器会增加1。但是如果你点击并按住它,我想让计数器在你按住它的时候每n秒增加1,一直这样做直到你松开为止。
如果我使用如下代码:

@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在一秒后变为true,然后立即变为false,并且onEnded中的print也在1秒后被调用。
我希望有一种方法可以在手指按下视图的同时不断调用代码来不断更新计数器--而不仅仅是在检测到长时间按下后一次。

3okqufwl

3okqufwl1#

使用以下组合来跟踪连续按下
使用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
            }
        }
}
zvms9eto

zvms9eto2#

DragGesture具有onChangedonEnded
只需将此添加到您的View

@State private var isPaused = false

.gesture(
    DragGesture(minimumDistance: 0)
        .onChanged({ _ in
            isPaused = true
        })
        .onEnded({ _ in
            isPaused = false
        })
)

您可以将其作为simultaneousGesture添加到Button
您可以使用ViewModifier来美化this文章。

相关问题