用户位置的自定义注释视图不移动地图视图

问题描述:

我们可以在iOS中为用户当前位置提供自定义注释视图吗?用户位置的自定义注释视图不移动地图视图

我需要删除与我自己的自定义视图(说一些ping pin)的蓝点(带圆圈)。是否有可能做到这一点?

如果我们这样做,当用户的位置发生变化时,此引脚是否会移动到新位置?或者我们需要以编程方式处理它?

我观察到,如果我们对用户的当前位置使用默认蓝点,则当用户位置发生更改时,它会在地图中更新。

我只想知道这是否可以用我们自己的自定义视图来完成。

是的,您可以为用户的位置提供自定义视图。

不幸的是,它比实际应用更难实现,因为即使documentation for the viewForAnnotation delegate method声称如果注释类是MKUserLocation,您可以提供自己的视图,那么自定义视图不会随用户的位置而继续移动。实际上,当自定义视图返回MKUserLocation时,地图视图会完全更新用户位置(地图视图的didUpdateUserLocation委托方法不再触发)。我相信这是一个错误。

一种解决方法是使用CLLocationManager和一个自定义的注释......


确保showsUserLocationNO或取消选中在地图视图。

声明为CLLocationManager和属性使用实现了MKAnnotation协议(或者你可以只使用通用MKPointAnnotation类)的自定义类的自定义注释。

viewDidLoad或其他适当的地方,创建CLLocationManager,设置它的delegate并呼叫startUpdatingLocation

location manager's didUpdateToLocation delegate method地图视图的didUpdateUserLocation委托方法),创建或更新您的自定义注释:

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    if (myUserLocAnnot == nil) 
    { 
     self.myUserLocAnnot = [[[MyUserLocClass alloc] init] autorelease]; 
      //remove the autorelease if using ARC 
     myUserLocAnnot.title = @"You are here"; 
     myUserLocAnnot.coordinate = newLocation.coordinate; 
     [mapView addAnnotation:myUserLocAnnot]; 
    } 
    else 
    { 
     myUserLocAnnot.coordinate = newLocation.coordinate; 
    } 
} 

最后,在地图视图中的viewForAnnotation委托方法,你会返回一个自定义的注释图如果注释是您的自定义用户位置注释。

+0

面临同样的问题,也许我们可以提出一个bug到苹果 – darshansonde 2012-07-12 07:16:18

+0

谢谢安娜,它的工作现在。即使我怀疑mapview中有一个错误,它在我们设置时没有显示用户位置的自定义注释视图。 – nkd 2012-07-12 10:28:37

+0

但我在这里遇到的另一个问题是,一旦开始位置更新,我就会将调用返回给locationManager:didUpdateToLocation:fromLocation方法,我在其中创建注释并将其添加到地图,但地图甚至没有显示我的自定义视图尽管我正在返回自定义视图。如果我关闭位置和位置,它就会起作用。这里有什么问题吗? – nkd 2012-07-12 15:03:50