В моем первоначальном ответе я думал, что целью было заменить мигающую синюю точку, которая появляется, когда вы используете MKMapView
на showUserLocation = YES
и userTrackingMode = MKUserTrackingModeFollow
. Поэтому я показал, как заменить его изображением или стандартным штифтом.
Но оказывается, что проблема не в том, что есть синяя точка, показывающая текущее местоположение, а в том, что ее анимация прерывается, появляется и исчезает, когда пользователь панорамирует и приближает карту.
Я видел такое поведение, если вы вызываете removeAnnotations
и удаляете все аннотации (включая аннотацию, созданную системой MKUserLocation
). Я также видел такое поведение, если выключить showUserLocation
и снова включить.
OP указывает, что ни одна из этих ситуаций не применима, но для будущих читателей это несколько соображений, которые могут вызвать такое поведение.
Оригинальный ответ:
Самый простой ответ - убедиться, что ваш контроллер является delegate
для вашего MKMapView
, а затем определить viewForAnnotation
, который обнаруживает MKUserLocation
, и заменить представление аннотации тем, что вы хотите. Например, если у вас есть @"user.png"
изображение, которое вы хотите показать, оно может выглядеть так:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
{
NSString *annotationIdentifier = @"userlocation";
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];
if (annotationView)
{
annotationView.annotation = annotation;
}
else
{
annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationIdentifier];
annotationView.image = [UIImage imageNamed:@"user.png"];
}
return annotationView;
}
// again, if you had other annotation types, such as MKPointAnnotation,
// handle them here
if ([annotation isKindOfClass:[MKPointAnnotation class]])
{
...
}
return nil;
}
Или, если вы хотите показать стандартный вывод, вы можете:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
{
if ([annotation isKindOfClass:[MKUserLocation class]])
{
NSString *annotationIdentifier = @"userlocation";
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];
if (annotationView)
{
annotationView.annotation = annotation;
}
else
{
annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationIdentifier];
}
return annotationView;
}
}
// again, if you had other annotation types, such as MKPointAnnotation,
// handle them here
if ([annotation isKindOfClass:[MKPointAnnotation class]])
{
...
}
return nil;
}
person
Rob
schedule
01.05.2013