【问题标题】:how to update MKPolyline / MKPolylineView?如何更新 MKPolyline / MKPolylineView?
【发布时间】:2010-07-03 13:07:40
【问题描述】:

我正在尝试创建一个定期更新的折线 (MKPolyline) 叠加层,以模拟对象的移动。我可以通过删除旧的叠加层、更新折线并再次添加叠加层来实现这一点,但这会导致闪烁。

对于一个点注解(MKPointAnnotation),你可以简单地改变它的坐标,视图会自动平滑地更新,而无需移除和重新添加注解。

这是否也可以通过某种方式覆盖?

【问题讨论】:

标签: iphone objective-c mapkit ios4


【解决方案1】:

是的,您必须添加一个额外的叠加层,其中包含从上一个点到下一个点的点集。使用点创建 MKPolyline 后,在绘制 MKPolylineView 时无法更改它,而无需删除旧的并添加新创建的。

您可以创建一个包含所有点(包括新点)的新折线视图,并将其添加到地图中,但不要删除旧的。然后,一旦添加了新的,您就可以删除旧的较短的。实施起来可能不太好,但它应该摆脱更新时的闪烁。你可以用标签区分旧的和新的。也许标记会起作用。

【讨论】:

  • 感谢您的回答。我已经按照您建议的方式实现了它,并且效果很好。正如你所说,这不是最漂亮的实现,但可能是我在不编写自己的 PolyLine 类的情况下能做到的最好的实现。
  • 感谢您的回答。不幸的是,这可能不能解决我的问题,因为我的覆盖是半透明的。我可能不得不在地图上添加我自己的视图。
【解决方案2】:

所有 MapKit 叠加层都是不可变的,因此为了获得可变性,您需要构建自定义叠加层并仅重绘需要更新的区域。

您可以在 Apple 的 Breadcrumb 示例应用程序示例中找到一个示例。 Breadcrumb link

【讨论】:

  • 感谢@SorinA - 正如我所提到的,我当时采用了@AtomRiot 的方法。但在应用程序的下一次更新中,我将查看 Breadcrumb 示例,看看这是否可以改进。
【解决方案3】:

MKPolyline 类继承了由一组点组成的 MKMultiPoint。这是一个只读属性,很遗憾,您无法更新它。

【讨论】:

  • 感谢您的回答彼得。有道理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多