|
Q: Мое представление выведено на экран правильно на экране, но не получает сенсорных событий. Почему это?A: Наиболее распространенная причина этой проблемы состоит в том, потому что Ваше представление расположено вне границ его родительского представления. Когда Ваше приложение получает сенсорное событие, процесс тестирования хита инициируется для определения, какое представление должно получить событие. Процесс запускается с корня иерархии представления, обычно окно приложения, и перерывает подпредставления впереди к задержанному заказу, пока это не находит представление frontmost от касания. То представление становится представлением теста хита и получает сенсорное событие. Если расположение события в его границах, каждое представление, вовлеченное в этот процесс сначала, тестирует. Только после того, как тест успешен, делает передачу представления событие к подпредставлениям для дальнейшего тестирования хита. Таким образом, если Ваше представление находится под касанием, но расположенный вне границ его родительского представления, родительское представление не протестирует расположение события и не передаст сенсорное событие Вашему представлению. Одно решение этой проблемы состоит в том, чтобы изменить расположение иерархии представления так, чтобы Ваше представление было в границах его родительского представления. Если по некоторым причинам существующее расположение должно сохраняться, можно изменить тестирующее хит поведение родительского представления так, чтобы это не игнорировало сенсорные события. Это может быть сделано путем переопределения - ( Перечисление 1: Переопределение метода тестирования хита класса родительского представления - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
// Convert the point to the target view's coordinate system.
// The target view isn't necessarily the immediate subview
CGPoint pointForTargetView = [self.targetView convertPoint:point fromView:self];
if (CGRectContainsPoint(self.targetView.bounds, pointForTargetView)) {
// The target view may have its view hierarchy,
// so call its hitTest method to return the right hit-test view
return [self.targetView hitTest:pointForTargetView withEvent:event];
}
return [super hitTest:point withEvent:event];
}
Для получения дополнительной информации о тестировании хита, см. обсуждении Поставки События в Руководстве по Обработке событий для iOS. Другие возможные причины этой проблемы включают:
Необходимо удостовериться Если Ваше представление не получает сенсорные события во время анимации, это потому что методы анимации История версии документа
|