Переход вида в TabBarController прерывает touchesMoved

Кажется, у меня возникли проблемы со следующей настройкой:

  • У меня есть подкласс UILongPressGestureRecognizer (import UIKit.UIGestureRecognizerSubclass), чтобы переопределить touchesMoved.
  • У меня есть кнопка, содержащая объект этого подкласса GestureRecognizer, который вызывает селектор.
  • Метод, вызываемый этим селектором, содержит обратный вызов, который будет вызываться исходным подклассом GestureRecognizer каждый раз, когда вызывается touchesMoved.

Поэтому, когда я долго нажимаю на кнопку, а затем перемещаю палец, обратный вызов вызывается несколько раз, и я могу просматривать свойства касаний, например, число. (touches.count)

Я пытаюсь перевести контроллеры представления TabBarController на основе информации о касаниях, но когда я реализую это (через selectedIndex = или UIView.transitionFromView()), обратный вызов вызывается только в начале longPressEvent. (т.е. только один раз, а не несколько раз.) Я не уверен, почему это происходит. Поскольку кнопка находится в TabBarController, на нее не должны влиять переходы представлений.

Вот некоторые из соответствующих кодов:

Подкласс GestureRecognizer:

import UIKit.UIGestureRecognizerSubclass

class LongPressGestureRecongnizerSubclass: UILongPressGestureRecognizer{
    var detectTouchesMoved = false
    var toCallWhenTouchesMoved: ((touches: Set<UITouch>) -> ())?
    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent) {
        if detectTouchesMoved{
            toCallWhenTouchesMoved?(touches: touches)
        } 

    }
}

Метод делегата, вызываемый при распознавании longPress.

func centerButtonLongPressed(tabBarView: TabBarView!){
    for gestureRecognizer in tabBarView.centerButton.gestureRecognizers!{
        if let longPressGestureRecognizer = gestureRecognizer as? LongPressGestureRecongnizerSubclass{
            longPressGestureRecognizer.detectTouchesMoved = true
            longPressGestureRecognizer.toCallWhenTouchesMoved = ({(touches: Set<UITouch>) -> (Void) in
                //Here I can view touches properties every time touchesMoved() is called, but not when I try to transition view here.
            })
        }
    }
}

ОБНОВЛЕНИЕ:

Я понял, что проблема в том, что поскольку переход вызывается синхронно, он путается с touchesMoved(). Когда я перемещаю метод перехода из потока пользовательского интерфейса, возникает следующая ошибка:

Это приложение модифицирует движок автомакета из фонового потока, что может привести к повреждению движка и странным сбоям. Это вызовет исключение в будущем выпуске.

Как предотвратить взаимодействие медленного синхронного кода перехода с touchesMoved()?

Как я могу достичь того, что я предполагаю? Спасибо за любую помощь.


person Acoop    schedule 25.03.2016    source источник


Ответы (1)


Я понял, что не было проблемы с анимацией, прерывающей касания. Прикосновения отменялись, потому что я неправильно использовал собственный UITabBarController, FoldingTabBar, который можно найти здесь

person Acoop    schedule 29.03.2016