用户位置的自定义注释视图不移动地图视图
我们可以在iOS中为用户当前位置提供自定义注释视图吗?用户位置的自定义注释视图不移动地图视图
我需要删除与我自己的自定义视图(说一些ping pin)的蓝点(带圆圈)。是否有可能做到这一点?
如果我们这样做,当用户的位置发生变化时,此引脚是否会移动到新位置?或者我们需要以编程方式处理它?
我观察到,如果我们对用户的当前位置使用默认蓝点,则当用户位置发生更改时,它会在地图中更新。
我只想知道这是否可以用我们自己的自定义视图来完成。
是的,您可以为用户的位置提供自定义视图。
不幸的是,它比实际应用更难实现,因为即使documentation for the viewForAnnotation delegate method声称如果注释类是MKUserLocation
,您可以提供自己的视图,那么自定义视图不会随用户的位置而继续移动。实际上,当自定义视图返回MKUserLocation
时,地图视图会完全更新用户位置(地图视图的didUpdateUserLocation
委托方法不再触发)。我相信这是一个错误。
一种解决方法是使用CLLocationManager
和一个自定义的注释......
确保showsUserLocation
是NO
或取消选中在地图视图。
声明为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
委托方法,你会返回一个自定义的注释图如果注释是您的自定义用户位置注释。
面临同样的问题,也许我们可以提出一个bug到苹果 – darshansonde 2012-07-12 07:16:18
谢谢安娜,它的工作现在。即使我怀疑mapview中有一个错误,它在我们设置时没有显示用户位置的自定义注释视图。 – nkd 2012-07-12 10:28:37
但我在这里遇到的另一个问题是,一旦开始位置更新,我就会将调用返回给locationManager:didUpdateToLocation:fromLocation方法,我在其中创建注释并将其添加到地图,但地图甚至没有显示我的自定义视图尽管我正在返回自定义视图。如果我关闭位置和位置,它就会起作用。这里有什么问题吗? – nkd 2012-07-12 15:03:50