У меня есть вид с распознающим жестом. Подвью к этому представлению представляет собой экземпляр моего пользовательского класса, который наследуется от UIControl. У меня возникает проблема, когда подкласс UIControl иногда позволяет передавать события касания к родительскому представлению, когда это не должно.UIControl endTrackingWithTouch не называется
В подклассе UIControl я переопределен эти функции (код в Swift)
override func beginTrackingWithTouch(touch: UITouch, withEvent event: UIEvent) -> Bool
{
return true
}
override func continueTrackingWithTouch(touch: UITouch, withEvent event: UIEvent) -> Bool
{
// The code here moves this UIControl so its center is at the touchpoint
return true
}
override func endTrackingWithTouch(touch: UITouch,withEvent event: UIEvent)
{
// Something important happens here!
}
Эта система работает нормально, если пользователь приземляется в UIControl, тащит контроль вокруг в как X и Y, а затем снимает экран. В этом случае все три функции называются, и происходит «что-то важное».
Однако, если пользователь прикасается к UIControl, перетаскивает элемент управления около только в направлении X, а затем снимает экран, у нас есть проблема. Вызываются первые две функции, но когда сенсорная точка поднимается с экрана, вызывается распознаватель жестов, а endTrackingWithTouch не вызывается.
Как я всегда убеждаюсь, что endTrackingWithTouch всегда называется?
Хороший ответ. Иногда вместо отключения жестов вы можете использовать способ делегирования жестов: необязательный func gestureRecognizer (_ gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool – viggio24
Если вы реализуете свой собственный TapGestureRecognizer и добавляете его в свой контроль, он ловит краны перед тем, как это произойдет. Таким образом, вам не нужно ничего знать о других распознавателях в иерархии представлений. Подробности ниже... –