iOS - Mapkit在地图视图更改(滚动,缩放)时保持动画用户位置

时间:2013-05-01 01:29:48

标签: ios animation mapkit repeat userlocation

我正在使用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...
}

3 个答案:

答案 0 :(得分:3)

在我的原始答案中,我认为目标是替换使用MKMapView showUserLocation = YESuserTrackingMode = MKUserTrackingModeFollow时获得的闪烁蓝点。因此,我展示了如何用图像或标准引脚替换它。

但事实证明,问题不在于有一个蓝点显示当前位置,而是它的动画被中断,当用户平移并放大地图时它会出现并消失。

如果您调用removeAnnotations并删除所有注释(包括系统生成的MKUserLocation注释),我已经看到了这种行为。如果您关闭showUserLocation并将其重新打开,我也会看到这种行为。

OP指出这些情况都不适用,但对于未来的读者来说,这些可能会导致这种行为。


原始答案:

最简单的答案是确保您的控制器是delegate的{​​{1}},然后定义检测到MKMapView的{​​{1}},并替换注释视图无论你想要什么。例如,如果您想要显示viewForAnnotation图像,则可能如下所示:

MKUserLocation

或者,如果您想要显示标准引脚,您可以:

@"user.png"

答案 1 :(得分:0)

在viewForAnnotation委托方法下捕获默认用户位置注释,因此不会绘制它。您可以使用布尔值来打开和关闭它,或者与LocationManager一起创建您自己的自定义注释。此链接可以让您走上正确的轨道:

User Location Anno

答案 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
}