【问题标题】:Load MKMapView in UITableViewCell quickly在 UITableViewCell 中快速加载 MKMapView
【发布时间】:2014-03-14 05:46:34
【问题描述】:

我只是一个相对较新的 iPhone 程序员,所以希望这是有道理的。

我在storyboard 中创建了一个UITableView,它显示正确。我创建了两种不同类型的原型表视图单元格。一个是使用“Left Detail”样式显示文本的简单单元格,而另一个包含MKMapView 和工具栏。我创建了地图的一个实例,所有其余的单元格都是简单的文本单元格。

我遇到的问题是,当最初显示表格视图时,包含地图的UITableViewCell 不在屏幕上。当我向下滚动时,加载单元格时 UI 会暂停。基于 Instruments,似乎时间都花在了[MKMapView initWithCoder],但我不知道在出队之前加载原型单元格的任何方法。

以前地图单元格位于首屏,因此在我进行任何滚动之前已加载。现在我已经重新安排了一些东西,它稍后加载并导致延迟。

有什么方法可以预加载包含MKMapViewUITableViewCell,或者将MKMapView 的部分加载放到后台?

【问题讨论】:

  • 地图是用户迭代的吗?你的目标是 >= 7.0,还是你也支持 6?
  • 地图是用户交互的。此外,目前这实际上只是一个个人项目,因此目前的目标是 >=7.0,尽管如果我看到需要,这可能会改变。
  • 另外,我确实注意到,当我在设备上独立运行应用程序时,性能几乎可以接受。当我使用 Xcode 调试器运行它时,减速更加明显。
  • 这种情况在使用XIBs/storyboards 时经常发生。您可能希望以编程方式(创建、添加和修改)您的地图。性能改进不会很大,但确实会有所作为。此外,您可能想要做的一件事是,尝试在地图实际加载时使用MKMapSnapshotter 在单元格中添加占位符快照,并在完成加载后立即删除快照。
  • @n00bProgrammer 在加载地图时使用MKMapSnapshotter 很有趣。我读过有关使用它来创建图片的信息,但没有考虑在加载时使用它。我会调查的。

标签: ios iphone uitableview mkmapview


【解决方案1】:

您可以在之前预加载MKMapView 视图实例,将其作为子视图添加到cellForRowAtIndexPath 方法中的单元格中。这样在显示单元格之前地图视图有一些时间加载。

【讨论】:

  • 这是否意味着我应该从原型单元格中删除 MKMapView 并在 cellForRowAtIndexPath 中显示它时将其添加?此外,如果我创建地图,它不会显示,直到我实际调用 addSubview?昨天我在这条道路上取得了一些进展,但还没有完全完成我的更改。
  • @Mike 是的,完全正确.. 我猜你只有一个地图视图要显示,这种方法很适合。我不确定地图视图在添加为子视图之前不会加载。如果是这种情况,那么您暂时将其作为子视图添加到具有不可见的微小帧大小的视图中。稍后您可以将其切换到您的单元格上。
  • 感谢您的帮助。现在好像快了一些。我花了一段时间才整理出代码,很抱歉响应缓慢。
【解决方案2】:

其他方法是使用MKMapSnapshotter,进行后台获取并缓存结果。请查看此答案https://stackoverflow.com/a/39479479/384288,也许它会对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多