我正在使用CLLocationManager的坐标在地图上显示用户的位置。每次移动或缩放地图时,用户定位销(带声纳效果的蓝色针)都会不断消失,然后重新制作动画回到地图上。 (我不是指声纳动画效果。蓝点字面上消失,然后再重新制作动画。)
滚动/缩放地图时,我没有调用任何其他方法。 使用断点,在map的委托方法中只调用return nil:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
//User's Pin
if([annotation class] == MKUserLocation.class) {
return nil;
}
....rest of my code here, nothing else is called as I am only plotting user at this time...
}
答案 0 :(得分:3)
在我的原始答案中,我认为目标是替换使用MKMapView
showUserLocation = YES
和userTrackingMode = MKUserTrackingModeFollow
时获得的闪烁蓝点。因此,我展示了如何用图像或标准引脚替换它。
但事实证明,问题不在于有一个蓝点显示当前位置,而是它的动画被中断,当用户平移并放大地图时它会出现并消失。
如果您调用removeAnnotations
并删除所有注释(包括系统生成的MKUserLocation
注释),我已经看到了这种行为。如果您关闭showUserLocation
并将其重新打开,我也会看到这种行为。
OP指出这些情况都不适用,但对于未来的读者来说,这些可能会导致这种行为。
原始答案:
最简单的答案是确保您的控制器是delegate
的{{1}},然后定义检测到MKMapView
的{{1}},并替换注释视图无论你想要什么。例如,如果您想要显示viewForAnnotation
图像,则可能如下所示:
MKUserLocation
或者,如果您想要显示标准引脚,您可以:
@"user.png"
答案 1 :(得分:0)
在viewForAnnotation委托方法下捕获默认用户位置注释,因此不会绘制它。您可以使用布尔值来打开和关闭它,或者与LocationManager一起创建您自己的自定义注释。此链接可以让您走上正确的轨道:
答案 2 :(得分:0)
如果您使用标准mapciew.showsUserLocation = true;
绘制用户的位置并且它滑动到屏幕上而不是脉动,那么可能是因为您的viewForAnnotation
方法。确保您只为您添加的引脚设置动画,而不是mapview添加的用户位置。
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
{
return nil;
}
//do stuff to the annotations that you added
}