MKMapView 覆盖在 appDidBecomeActive 上重置

Posted

技术标签:

【中文标题】MKMapView 覆盖在 appDidBecomeActive 上重置【英文标题】:MKMapView overlays get reset on appDidBecomeActive 【发布时间】:2012-03-11 20:50:24 【问题描述】:

我有这个带有一堆叠加层的地图视图。当我点击主页按钮并重新打开它时,所有叠加层都会消失一秒钟,然后立即重新出现。起初我以为是我的代码在做这件事,但我几乎在所有地方都设置了断点,而且我的代码似乎都没有触发“重置”。甚至 mapView:viewForOverlay: 在覆盖重新出现之前也不会被调用。

我认为这可能是MKMapView 的必然行为,但 Maps.app 似乎也没有这样做 - 如果您计算路线并退出/重新打开应用程序,则叠加层会一直保留在那里时间。

我在想也许 MKMapView 在默认情况下会在退出时清除其所有注释/覆盖,因此在保持后台运行时占用更少的内存。有没有办法避免这种情况?有点像 Maps.app 吗?

编辑:here's a small project 我放在一起来演示这个问题。只需在模拟器中启动它,单击主页按钮,然后重新打开它。您会看到地图路径叠加层消失片刻。

【问题讨论】:

你在用arc吗? arc 会在它们不使用时立即释放对象,因此在进入背景时它们会消失,一旦使用它们就会重新出现。这只是一个想法,因为我有一些在后台切换时重置的视图。 我正在使用 ARC,但我的控制器在 mapView 上保存了一个 strong 引用,它本身应该在其叠加层上保存一个 strong 引用吗? 我的 MapKit 应用程序做同样的事情,我认为这就是它的方式。为什么会出现这个问题? @shawkinaw 应用程序重新启动时,没有理由让叠加层闪烁。想象一下,如果 tableViews 的内容在应用重新启动时会闪烁;它会被广泛报道并可能很快得到修复。地图叠加层不太常见,因此该错误未被注意到。 【参考方案1】:

这更像是一个后续问题,而不是实际答案,但基本上这个问题已被 Apple 标记为错误。我不久前将此作为 TSI 提交给 Apple,并收到以下答复:

感谢您提供示例项目。我没有看到你的任何问题 代码。在这一点上,我建议通过以下方式将问题升级为工程 提交有关重绘 MKPolylineView 的“闪烁”的错误 在https://developer.apple.com/bugreporter/ 并将错误发送给我 号码,以便我可以用它来跟进。

然后我提交了雷达#11041378

再次感谢您的错误报告。碰巧,我没有 目前为您提供解决方法。工程仍在研究中 问题,但我没有修复的时间表。

只要有错误,我会继续为您保留此事件 11041378 已开通。如果您对未来的状态或解决方法的状态有任何疑问,请随时回复,我 会帮你查的。

如果您有任何工程方面的 cmets,或者想讲述 为什么这对你的情况很重要,我实际上鼓励你 将其直接放入错误中。因为它被分配到工程, 任何 cmets 都会直接去找他们。

我附加了以下评论,描述了为什么这个问题对我很重要:

这个错误对我来说相当重要,因为用户希望找到 应用程序处于他退出应用程序时离开它的确切状态。闪烁的 覆盖(有时消失不到一秒,其他时间 2-3s) 可能会让用户对正在发生的事情感到困惑,当他 真正想要的是立即与地图/叠加层进行交互。

从那以后就没有收到 Apple 的回复。希望这会在 ios 6 中得到解决?

【讨论】:

以上是关于MKMapView 覆盖在 appDidBecomeActive 上重置的主要内容,如果未能解决你的问题,请参考以下文章

被 CLSqliteDatabaseManager 覆盖的 MKMapView userTrackingMode

iOS - 当我将方法移动到另一个类时,MKMapView 覆盖不会呈现

MKMapView 缩放以显示框架中的所有注释

MKMapView 如何将经度纬度转换回厘米?

将自定义位置点添加到 MKMapView

滚动 MKMapView 时淡出弹出框