在MKMapView中移动MKCircle

6

当我试图在我的MKMapView中移动MKCircle时,我收到了这个错误信息:-[MKCircle setCoordinate:] unrecognized selector ..。但是根据文档,MKCircle符合MKAnnotation协议,因此应该已经实现了setCoordinate:方法(此外,Xcode还为我提供了自动建议,并且调试器没有显示任何警告)。

有人知道问题出在哪里吗?

非常感谢。

1个回答

9
尽管MKCircle符合MKAnnotation,但是不幸的是,MKCircle类重写了坐标属性,将其设置为只读:

圆形区域的中心点,以纬度和经度指定。(只读)

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate

最简单的解决方案是使用removeOverlay:删除旧的覆盖层,并使用新的中心坐标和半径添加新的覆盖层。

是的,即使在MKAnnotation协议中,这个属性也是只读的,但是还有一个setter可以绕过它。我知道我可以将其删除并重新创建到其他地方,但我使用圆圈来显示自定义注释周围的位置精度,这些注释标记地图上的其他人,并且我想要动画移动圆圈以及注释(当然还包括圆圈的放大和缩小)。但是根据文档,覆盖层应该用于显示静态数据(在地图上突出显示道路等),因此删除/重新添加就足够了。;o) 无论如何,感谢您的答复。 - JakubM
我也想要“移动”圆形覆盖层,而不仅仅是删除并添加,因为我想要动画效果。你找到任何解决方案了吗? - user836026
1
@user836026:是的,你需要创建一个自定义叠加层。请查看我在这个问题中的评论了解更多详细信息。 - user467105
我看到了crumbPath的示例,但我不确定如何使用它来绘制一个圆形。 - user836026
1
LocationReminders应用程序来自于2010年的WWDC,更接近您想要的。它是MKOverlayPathView的子类(而不是MKOverlayView),在createPath方法中,使用CGPathAddArc生成一个圆形。当检测到其关联的MKOverlay对象的中心坐标或半径发生变化时(它使用KVO进行检测,但您也可以以其他方式监视),圆形覆盖视图会通过调用invalidatePath来“移动”。 - user467105

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接