Nav*_*een 13 map mkmapview ios
我们可以为iOS中的用户当前位置设置自定义注释视图吗?
我需要用我自己的自定义视图(比如一些ping引脚)删除蓝点(带圆圈).是否有可能做到这一点?
如果我们这样做,当用户位置发生变化时,此引脚是否会移动到新位置?或者我们需要以编程方式处理它吗?
我观察到如果我们对用户的当前位置使用默认蓝点,那么当用户位置发生变化时,它会在地图中更新.
我只想知道是否可以使用我们自己的自定义视图完成此操作.
小智 14
是的,您可以拥有用户位置的自定义视图.
不幸的是,它实现起来比应该更难,因为即使viewForAnnotation委托方法的文档声称如果注释类可以提供您自己的视图MKUserLocation,自定义视图也不会继续随用户的位置移动.实际上,当返回自定义视图时MKUserLocation,地图视图将完全停止更新用户位置(地图视图的didUpdateUserLocation委托方法不再触发).我相信这是一个错误.
解决方法是使用CLLocationManager和自定义注释...
确保showsUserLocation是NO或取消选中在地图视图.
CLLocationManager使用实现MKAnnotation协议的自定义类声明a 和自定义注释的属性(或者您可以只使用泛型MKPointAnnotation类).
在viewDidLoad其他适当的位置,创建CLLocationManager,设置delegate和调用startUpdatingLocation.
在位置管理器的didUpdateToLocation委托方法(而不是地图视图的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;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,在地图视图的viewForAnnotation委托方法中,如果注释是自定义用户位置注释,则会返回自定义注释视图.
| 归档时间: |
|
| 查看次数: |
4963 次 |
| 最近记录: |