Я добавил UITapGestureRecognizer
к MKMapView
, например, так:UITapGestureRecognizer на MKMapView ломает выбор MKAnnotation
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(doStuff:)];
[tapGesture setCancelsTouchesInView:NO];
[tapGesture setDelaysTouchesEnded:NO];
[[self myMap] addGestureRecognizer:tapGesture];
[tapGesture release];
Это почти работает: нажмите жесты распознаются и двойные отводы по-прежнему изменять масштаб карты. К сожалению, UITapGestureRecognizer
вмешивается в выбор и отключение элементов MKAnnotationView
, которые также запускаются жесты касания.
Установка свойств setCancelsTouchesInView
и setDelaysTouchesEnded
не имеет значения. Выбор аннотации работает отлично, если я не добавляю UIGestureRecognizer
.
Что мне не хватает?
UPDATE:
Как было предложено ниже Анны Карениной, эту проблему можно избежать путем возвращения YES
в методе shouldRecognizeSimultaneouslyWithGestureRecognizer:
делегата.
Подробнее в this answer.
Скорее всего, вам понадобится подкласс MKMapView и перезаписать 'touchhesBegan:' и т. Д. Вместо использования распознавателей жестов. Оттуда вы можете определить, возникло ли прикосновение из аннотации и передать его в супер-представление или захватить его в зависимости от вашей реализации. – Rog
Попробуйте [этот ответ] (http://stackoverflow.com/a/6455734/467105), в котором предлагается внедрить shouldRecognizeSimultaneousWithGestureRecognizer. – Anna
Спасибо за ответы! @ Ответ АнныКаренины сделал трюк. Нет необходимости подкласса MKMapView. – carton