1

我对 Swift 和编程非常陌生。我正在尝试创建由 UILongPressGestureRecognizer 触发的触觉反馈模式。当用户“长按”屏幕时,我希望手机振动 3 次,每次振动之间有 1 秒的延迟。我尝试使用“睡眠”来完成 1 秒的延迟,但这不起作用。正确执行此操作的最佳方法是什么?

var feedbackGenerator : UIImpactFeedbackGenerator? = nil

func performFeedbackPattern() {

    //create the feedback generator
    feedbackGenerator = UIImpactFeedbackGenerator(style: .heavy)
    feedbackGenerator?.prepare()

    //play the feedback three times with 1 second between each feedback
    feedbackGenerator?.impactOccurred()
    sleep (1)
    feedbackGenerator?.impactOccurred()
    sleep (1)
    feedbackGenerator?.impactOccurred()
}


@IBAction func gestureRecognizer(_ sender: UILongPressGestureRecognizer) {
    switch sender.state {
        case .began:
            performFeedbackPattern()
        default: break
    }
4

2 回答 2

-1

您可以使用触觉反馈创建OperationQueue和添加操作。操作如下所示:

class HapticFeedbackOperation: Operation {
    override func main() {
        // Play the haptic feedback
        UIImpactFeedbackGenerator(style: .heavy).impactOccurred()
    }
}

您可能希望在操作之间添加延迟。

查看我的开源框架HapticaHaptic Feedback,它同时支持AudioServices和独特的振动模式。适用于 Swift 4.2、Xcode 10

于 2019-01-28T10:13:19.863 回答
-1

最近我在做类似的事情,想出了一个小豆荚你可以看看。这是链接https://github.com/iSapozhnik/Haptico

所以这个想法是用操作组构建一个 OperationQueue。一项操作可能是您的触觉反馈,另一项操作可能是暂停操作。

于 2018-11-12T13:26:58.927 回答