我需要用自己的自定义视图删除蓝点(带圆圈)(说一些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委托方法中,如果注释是您的自定义用户位置注释,则将返回自定义注释视图.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。