Как создать выносной пузырь MKAnnotationView, который реагирует на прикосновения


Я пытаюсь сделать пользовательский вид аннотации способным отвечать на прикосновения без успеха.
Благодаря этому вопросу мне удалось сделать аннотацию, близкую к тому, что я хочу, чтобы настроить пузырь выноски для аннотации? также видел это, как захватить прикосновения и не отклонить выноску? но проблема совсем в другом Первое, что я сделал на данный момент, это создание подкласса MKAnnotationView и переопределение -setSelected:animated: метод

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  [super setSelected:selected animated:animated];
  if(selected)
  {
    MyCallOut * callOut=[MyCallOut createMyCallOut];
    callOut.tag=555;
    [self.superview addSubview:callOut];

  }
  else
  {
    // [[self viewWithTag:555] removeFromSuperview];
    //Remove my custom CallOut
  }
}

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

В одном из моих экспериментов я пытался добавить вид выноски в суперпредставление MKAnnotationView (mapView), пока все прокручивается, все выглядит нормально, но если я увеличиваю масштаб, выноска перемещается.

2 ответа

Вы должны добавить внешний вид вызова в аннотации карты

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation {
MKPinAnnotationView *pinView = nil; 
if(annotation != mapView.userLocation) 
{
    static NSString *defaultPinID = @"com.invasivecode.pin";
    pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
    if ( pinView == nil ) pinView = [[[MKPinAnnotationView alloc]
                                      initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];
    pinView.pinColor = MKPinAnnotationColorRed; 
    pinView.canShowCallout = YES;
    pinView.animatesDrop = YES;
    pinView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    return pinView;



} 
else {
    [mapView.userLocation setTitle:@"I am here"];
}
return pinView;
}

и для события клика вашего вызова

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control   
{

}

Решив поиск по этой ссылке Пользовательские аннотации и выноски, другая сложная часть заключается в правильном способе нажатия кнопки на ложной выноске. Я управлял этой частью, создавая логическое значение, которое понимает количество аннотаций /parentAnnotation на экране и выбирает, когда оно может исчезнуть или нет. Просто нужно сделать CalloutAnnotation доступным для выбора.

Другие вопросы по тегам