Как я могу сделать пользовательский пин-код и использовать режим 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;
}