连续创建多个MKMapView快照

时间:2015-02-05 09:57:52

标签: ios mkmapview mkmapsnapshotter

我编写并使用THIS CLASS使用自定义注释创建MKMapView的小型快照图片,并将其设置在UIImageView的{​​{1}}内。我以这样的方式写它,调用和忘记,而不必过多担心内存消耗。

工作原理:

  • 我有一个字典,其中包含一个地方的相关值(名称,纬度,经度等)[来源是FourSquare API]。

  • 然后我请求UITableViewCell(参见Gist)为该位置创建一个图像,并将其设置在子类CellMapFactory的图像视图中,如下所示:

    UITableViewCell
  • 然后,CellMapFactory使用CellMapFactory* cellMapFactory = [[CellMapFactory alloc] init]; [cellMapFactory createCellMapForPlace:[self.cellData objectForKey:@"checkin"] inImageView:mapImageView];//mapImageView is a `UIImageView`. MKMapSnapshotOptions和自定义注释创建此图像,并在成功完成后将其设置在引用的图像视图中。

  • 此外,成功完成后,我使用MKMapSnapshotter手动将图像缓存到磁盘,以便下次请求相同位置的屏幕截图时,从SDWebImageManager磁盘缓存中获取而不是重做整个过程。

问题

地图创建过程以及将完成的图像设置为图像视图绝对没问题。但是,当表中的多个单元格需要绘制这些不同的快照时,每个单元格都会创建一个新的SDWebImage实例,该实例又会为应用程序窗口添加新的CellMapFactory 。这疯狂地增加了内存使用量。

所需解决方案

我希望MKMapView能够连续创建这些快照。例如,如果我的表中的20个单元格需要20个唯一快照,CellMapFactory必须以串行方式处理它们(队列?),并使用相同的CellMapFactory一次创建一个快照。我看到它的方式(也许我错了),这将有助于大大限制内存消耗。

以下是一个示例屏幕截图,仅供记录:

enter image description here

将非常感谢任何帮助(以及所需解决方案的变体)。感谢。

1 个答案:

答案 0 :(得分:1)

如何创建单元可用于请求快照的快照界面。对于快照不可用时,它提供了一种机制,您可以安排快照创建并注册它可以回调以接收创建的映像的委托或完成块。

如果您在每个单元格中执行此操作,则可以提供占位符图像,该图像将在可用时更新为正确的图像。

在实现中,只需排队请求,这些请求应允许您一次执行一个请求。完成后,缓存并触发完成委托/块。不知道你可以在后台运行多少这项任务?可能你可以运行一些线程来控制使用多少MKMapView,从而平衡内存和性能。