Создание тактильной схемы обратной связи в Swift 3

Я очень новичок в Swift и программировании. Я пытаюсь создать шаблон тактильной обратной связи, запускаемой UILongPressGestureRecognizer. Когда пользователь "долго нажимает" на экран, я хочу, чтобы телефон вибрировал три раза с задержкой в ​​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
    }

1 ответ

Вы можете создать OperationQueue и добавить операции с тактильной обратной связью. Операция будет выглядеть так:

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

Вы можете добавить задержку между операциями.

Оформить заказ моего фреймворка с открытым исходным кодом Haptica, он поддерживает как Haptic Feedback, AudioServices и уникальные шаблоны вибрации. Работает на Swift 4.2, Xcode 10

Недавно я делал что-то подобное и придумал маленькую коробочку, на которую можно взглянуть. Вот ссылка https://github.com/iSapozhnik/Haptico

Таким образом, идея состоит в том, чтобы создать OperationQueue с отделом операций. Одной операцией может быть ваша тактильная обратная связь, а другой - операция паузы.

Другие вопросы по тегам