Обнаружение всех касаний в приложении - PullRequest
3 голосов
/ 08 декабря 2011

В приложении для iPad, где бы пользователь ни касался экрана, я хочу отобразить изображение, выделив точки, к которым он прикасается.Приложение содержит несколько вложенных представлений, каждое из которых должно получать прикосновения и вести себя нормально.

Кажется простым, но я не смог найти хороший способ сделать это.Использование touches began: with event и связанных функций на контроллере корневого представления не работает, потому что при касании подпредставления события не запускаются.Я также создал «фиктивный» распознаватель жестов, который просто передает сенсорные события другому классу, который рисует изображения.Это работает отлично, кнопки работают, но ломает UIScrollViews, и я предполагаю, что другие подпредставления с помощью преобразователей жестов.

Нигде нет доступа к всем событиям касания, не влияющим на где эти прикосновения во главе?

спасибо.

Ответы [ 3 ]

6 голосов
/ 08 декабря 2011

Ваш фиктивный распознаватель жестов должен быть в порядке.Просто следите за настройкой состояний.возможно -> началось -> ...

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

Чтобы избавиться отпроблемы с другими распознавателями жестов возвращают YES в этом методе делегата.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
    return YES;
}

Другой вариант - создать подкласс главного UIWindow в вашем приложении и переопределить этот метод

- (void)sendEvent:(UIEvent *)event

Здесь вы должны иметь доступ квсе события.Их довольно легко отфильтровать.

3 голосов
/ 08 декабря 2011

Вы можете применить UITapGestureRecognizer ко всему виду и установить для свойства cancelsTouchesInView значение NO.Это позволит вам получать уведомления обо всех касаниях вида и его подпредставлений без перехвата всех событий касания.

Кроме того, вы можете реализовать метод делегата -gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:, чтобы этот распознаватель жестов не давил на те, которые используются представлениями, такими как UIScrollView.

1 голос
/ 08 декабря 2011

вы можете попробовать переопределить hitTest: withEvent:

-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event

Это может быть то, что вы ищете.

...