MkMapView нажмите + проблема выбора аннотации - PullRequest
5 голосов
/ 23 сентября 2011

У меня есть MkMapView, на котором у меня есть некоторые аннотации. Когда я щелкаю аннотацию, ее детали открываются в другом виде, который имеет вид прокрутки в нижней половине вида карты. Когда мы прокручиваем прокрутку, карта центрируется на следующей аннотации, а ее детали отображаются в виде прокрутки.

Моя проблема в том, что я хочу добавить жест касания на карту, чтобы при нажатии на карту вид прокрутки скрывался. Для этого я добавил UiTapGesture на карту, которая также работает нормально, но проблема в том, что аннотации на карте больше не остаются доступными для записи. Карта всегда переходит в действие tapgesture и никогда больше не вызывает метод selectannotation?

Как я могу решить эту проблему ????

Ответы [ 3 ]

4 голосов
/ 23 сентября 2011

Вы можете настроить распознавание жестов и работу карты одновременно, применив метод делегата shouldRecognizeSimultaneouslyWithGestureRecognizer.

При создании жеста касания установите его делегата:

tapGR.delegate = self;  //also add <UIGestureRecognizerDelegate> to @interface

иРеализуйте метод:

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

Теперь будет вызван как ваш метод жестов касания, так и didSelectAnnotationView.

Предполагая, что ваш обработчик касаний вызывается первым, вы можете удалить и обнулить представление прокрутки, а затем didSelectAnnotationView создаст и добавит представление прокрутки.Если последовательность оказывается другой, вам может потребоваться добавить несколько флагов для координации удаления / создания.

3 голосов
/ 18 ноября 2013

Не совсем понятно, но единственный способ найти это - проверить все видимые аннотации внутри метода shouldBeginGestureRecognizer:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    CGPoint p = [gestureRecognizer locationInView:self.mapView];
    NSLog(@"touch %f %f",p.x,p.y);

    MKMapRect visibleMapRect = self.mapView.visibleMapRect;
    NSSet *visibleAnnotations = [self.mapView annotationsInMapRect:visibleMapRect];

    for ( MyCustomAnnotation *annotation in visibleAnnotations ){

        UIView *av = [self.mapView viewForAnnotation:annotation];
        if( CGRectContainsPoint(av.frame, p) ){
            // do what you wanna do when Annotation View has been tapped!
            return NO;
        }
    }

    return YES;
}
0 голосов
/ 03 января 2012

Я думаю, что вы должны добавлять распознаватель жестов только при отображении прокрутки.Как и в случае с клавиатурой, приведенной в примере ниже 1. Когда клавиатура отображается, mapView добавляет жест касания 2. Когда нет, я удаляю распознаватель жестов.

...