Получение сенсорных событий на более чем одном UIView одновременно - PullRequest
3 голосов
/ 03 января 2011

У меня есть куча UIViews, сложенных друг на друга (не вложенных).Я хочу, чтобы все они реагировали на прикосновения, но кажется, что самый верхний вид скрывает под ним взгляды, не давая им получать сенсорные события.

Сначала я подумал, что поймал бы все сенсорные события с верхним видом, а затем вручную вызвал методы
hitTest или pointInside для всех базовых представлений, но я обнаружил, чтометоды как-то приватны (может ли это быть?) и недоступны.

Есть идеи, как это осуществить?

Ответы [ 2 ]

3 голосов
/ 03 января 2011

Касания отправляются на один просмотр.Это представление может затем передать их по цепочке респондента.Если вы хотите обрабатывать касания к коллекции представлений, вы должны переслать эти события следующему респонденту и иметь общий родительский элемент для всех из них (или их контроллер представления, поскольку контроллер также является частью цепочки респондента) обрабатывать эти события.прикосновения.

https://developer.apple.com/library/mac/documentation/General/Devpedia-CocoaApp-MOSX/Responder.html

3 голосов
/ 03 января 2011

Вы можете проверить, касается ли касание вашего самого верхнего вида.Если это не так, вы можете вызвать тот же метод вашего суперпредставления.Что-то вроде [self.superview sameMethod: sameParameter].

В вашем верхнем представлении есть метод

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

Внутри этого метода вы правильно делаете свою логику?Внутри метода вы не можете проверить, находится ли полученное касание на самом верхнем экране с помощью

UITouch *touch = [touches anyObject];<br> [touch locationInView:self];

И если это не так, вы передаете его тому же методу superView, используя

[self.superview touchesEnded:touches withEvent:event];
...