Тактильная обратная связь все еще продолжается после переключения контроллера представления

У меня есть вторичный контроллер представления, который использует некоторую тактильную обратную связь. Я запускаю тактильную обратную связь по запланированному таймеру, который повторяется каждые 14 секунд.

      Timer.scheduledTimer(withTimeInterval: 14, repeats: true) { _ in
                self.changeLabel()
                }

Этот таймер вызывает функцию, которая запускает 2 тактильных обратной связи.

      @objc func changeLabel() {
        
    if counter2 == 1 {
       //Haptics
       let impactGenerator = UIImpactFeedbackGenerator(style: .medium)
       impactGenerator.prepare()
       impactGenerator.impactOccurred()
       Timer.scheduledTimer(withTimeInterval: 7, repeats: false) { _ in
       let impactGenerator = UIImpactFeedbackGenerator(style: .medium)
       impactGenerator.prepare()
       impactGenerator.impactOccurred()}
    //Changing Label
    self.mainFocusLabel.text = self.foclabel1Text
    self.manifestationImg.sd_setImage(with: URL(string: self.imglabel1URL))
    self.counter2 = 2

(есть еще код, но все они почти идентичны этому блоку, единственное отличие состоит в том, что он просто меняет метку на focuslabel2-10 и использует счетчик для распознавания следующей метки, которую нужно изменить.

Что происходит, что меня смущает, - это то, что после закрытия обзора вибрации (и, очевидно, таймер?) Все еще продолжаются. Мой телефон вибрирует с одинаковыми интервалами. Я не видел кода для отключения тактильной обратной связи. Я могу представить, что могу просто добавить это к другому контроллеру представления, чтобы решить эту проблему.

1 ответ

Решено .. Вид.

Мне пришлось сделать таймер переменной

      var forteenSecTimer : Timer?

 forteenSecTimer = Timer.scheduledTimer(withTimeInterval: 14, repeats: true) { _ in
                self.changeLabel()
                }

А затем добавить этот код к любой кнопке выхода или готовности. Мне пришлось программно заменить кнопку возврата, чтобы я мог убедиться, что этот код активируется всякий раз, когда представление закрывается.

      forteenSecTimer?.invalidate()

Мне также пришлось изменить стиль представления контроллера представления с всплывающего окна, чтобы просто показать, потому что я не знал, как активировать этот код, когда представление просто сдвинулось, чтобы избавиться от него.

Не идеальное решение, но это то, что я придумал.

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