用户位置的自定义注释视图不移动地图视图
我们可以在iOS中为用户定制注释视图吗?
我需要用我自己的自定义视图(比如一些ping脚)去掉蓝点(带圆圈)。 是否有可能做到这一点?
如果我们这样做,当用户的位置发生变化时,此引脚是否会移动到新的位置? 或者我们需要以编程方式处理它?
我观察到,如果我们使用默认蓝点作为用户的当前位置,那么当用户位置发生变化时,它会在地图中更新。
我只想知道这是否可以用我们自己的自定义视图来完成。
是的,您可以为用户的位置提供自定义视图。
不幸的是,它比实际上更难以实现,因为即使viewForAnnotation委托方法的文档声明,如果注解类是MKUserLocation
,您也可以提供自己的视图,那么自定义视图将不会继续随用户位置一起移动。 实际上,当为MKUserLocation
返回一个自定义视图时,地图视图将停止完全更新用户位置(地图视图的didUpdateUserLocation
委托方法不再触发)。 我相信这是一个错误。
解决方法是使用CLLocationManager
和自定义注释…
确保在地图视图中,显示用户showsUserLocation
是否为“未选中”。
使用实现MKAnnotation
协议的自定义类声明CLLocationManager
属性和自定义注释(或者您可以使用通用的MKPointAnnotation
类)。
在viewDidLoad
或其他适当的地方,创buildCLLocationManager
,设置它的delegate
并调用startUpdatingLocation
。
在位置pipe理器的didUpdateToLocation
委托方法 ( 而不是地图视图的didUpdateUserLocation
委托方法)中,创build或更新您的自定义批注:
-(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
委托方法中,如果注释是您的自定义用户位置注释,您将返回一个自定义注释视图。