无论是自定义的MKAnnotationView还是标准的,一旦addAnnotation to MapView,如何更新它在地图上的位置呢?更新MKAnnotation protocol中的coordinate可以做到吗? 如果是手动更新位置是不可以让它在地图上移动的。请看官网文档,其中有一段描述
“Important:When you implement thecoordinateproperty in your class, it is recommended that you synthesize its creation. If you choose to implement the methods for this property yourself, or if you manually modify the variable underlying that property in other parts of your class after the annotation has been added to the map, be sure to send outkey-value observing (KVO)notifications when you do. Map Kit uses KVO notifications to detect changes to thecoordinate,title, andsubtitleproperties of your annotations and make any needed changes to the map display. If you do not send out KVO notifications, the position of your annotations may not be updated properly on the map.
For more information about how to implement KVO-compliantaccessor methods, seeKey-Value Observing Programming Guide.”
手动更新后必须用KVO的方式通知系统,不然系统是不知道更新位置的。如何通知道呢,其实NSObject中有这样的方法willChangeValueForKey and didChangeValueForKey。如你写了个方法更新pin位置,如下:
-(void)UpdateCoord:(CLLocationCoordinate2D)newCoord { [self willChangeValueForKey:@"coordinate"]; coordinate = newCoord; [self didChangeValueForKey:@"coordinate"]; }
IOS4中更新更简单,只需要调用- (void)setCoordinate:(CLLocationCoordinate2D)newCoordinate;这个方法就可以自动更新了。
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo} span.s1 {color: #be299d} span.s2 {color: #733ea4}
本文介绍如何在iOS应用中正确更新地图上标注的位置。通过实现MKAnnotation协议中的coordinate属性,并使用KVO通知系统来确保更新后的坐标能及时反映到地图显示上。
1354

被折叠的 条评论
为什么被折叠?



