我们可以为iOS中的用户当前位置定制注释视图吗?
我需要用自己的自定义视图删除蓝点(带圆圈)(说一些ping pin).有可能做到吗?
如果我们这样做,当用户位置发生变化时,这个引脚是否移动到新的位置?或者我们需要以编程方式处理它?
我观察到,如果我们使用用户当前位置的默认蓝点,那么当用户位置发生变化时,它会在地图中更新.
我只想知道这是否可以用我们自己的自定义视图来完成.
解决方法
是的,您可以为用户的位置定制视图.
不幸的是,实现起来比应该更难,因为即使documentation for the viewForAnnotation delegate method声称如果注释类是MKUserLocation,您只能提供自己的视图,那么自定义视图不会随着用户的位置继续移动.事实上,当为MKUserLocation返回自定义视图时,地图视图将完全停止更新用户位置(地图视图的didUpdateUserLocation委托方法不再触发).我相信这是一个错误.
解决方法是使用CLLocationManager和自定义注释…
使用实现MKAnnotation协议的自定义类声明CLLocationManager的属性和自定义注释(或者您可以使用通用的MKPointAnnotation类).
在viewDidLoad或其他适当的位置,创建CLLocationManager,设置其委托并调用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委托方法中,如果注释是您的自定义用户位置注释,则将返回自定义注释视图.