Как я могу сделать пользовательский пин-код и использовать режим FollowWithHeading вместе?

Следующий код ниже показывает пользовательский пин (рисунок как пин). он может использовать как обычно.

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {

   PVAttractionAnnotationView *annotationView = [[PVAttractionAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Attraction"];
   annotationView.canShowCallout = YES;
   return annotationView;

}

Затем используйте следующий код, чтобы показать текущее местоположение

[self.mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading];

XCODE перейти на main.m и показать

Тема 1: Сигнал SIGABRT

С другой стороны, если я использую следующий код

[self.mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading];

и неиспользованный весь следующий код

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {

   PVAttractionAnnotationView *annotationView = [[PVAttractionAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Attraction"];
   annotationView.canShowCallout = YES;
   return annotationView;

}

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

Как я могу сделать пользовательский пин-код и использовать FollowWithHeading режим вместе?

Извините, я плохо говорю по-английски.

1 ответ

Решение

Вам нужно небольшое изменение вашего viewForAnnotation который проверяет класс аннотации и возвращает соответствующий вид. При возврате nil система будет использовать вид по умолчанию. Вам также понадобится дополнительный код, чтобы правильно реализовать повторное использование представления -

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKAnnotationView *annotationView=nil;
    if ([annotation isKindOfClass:[PVAttractionAnnotation class]])  // Note - put your custom annotation class here
    {
        annotationView =(MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"Attraction"];
        if (annotationView == nil)
        {
            annotationView = [[PVAttractionAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Attraction"];  
            annotationView.canShowCallout = YES; 
        }
        else
        {
            annotationView.annotation=annotation;
        }

    }
    return annotationView;
}
Другие вопросы по тегам