Я, кажется, возникли некоторые проблемы со следующей установкой:вид Переход в 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.
})
}
}
}
UPDATE:
я понял, что проблема в том, что, поскольку переход вызывается синхронно, она портит с touchesMoved()
. Когда я двигаю метод перехода от потока пользовательского интерфейса, генерируются следующее сообщение об ошибке:
Это приложение модификация autolayout двигателя от фонового потока, что может привести к повреждению двигателя и странным авариям. Это приведет к исключению в будущей версии.
Как предотвратить медленный синхронный код перехода от беспорядка с помощью touchesMoved()
?
Как я могу достичь того, что я представляю? Спасибо за любую помощь.