使用NSURLConnection下载CATiledLayer的磁贴

时间:2010-10-08 14:26:04

标签: iphone objective-c

我正在研究Apple ScrollViewSuite和Photoscroller,我想知道如何在通过NSURLConnection下载切片时实现CATiledLayer: 如何通知 drawRect:已下载特定磁贴,如何跟踪与每个磁贴关联的rects和contex?

关心Fredrik

3 个答案:

答案 0 :(得分:2)

完成下载后,缓存结果,然后使用tile的rect调用setNeedsDisplayInRect:。它将再次调用drawLayer:inContext:然后您可以绘制缓存的结果。

答案 1 :(得分:0)

我认为没有办法做到这一点,因为它应该以其他方式工作。 Tiles以分离的线程呈现,因此您可以从drawLayer:InContext:方法开始下载tile。当然不要忘记为下载的磁贴实现缓存,否则你会杀死你的应用和发票: - )

答案 2 :(得分:0)

无法从平铺图层中获取必要的信息。我目前只是每隔几秒钟对图层进行一次无效/重绘,以获得某种“最终一致性”。也就是说,在某个时间点,我希望所有可见的图块都已加载并缓存(由我自己的控制器)。然后,重绘将使用缓存中的图像简单地渲染所有图块。

要实现这一点,您需要能够计算可见磁贴的集合,并在未缓存时重新下载它们。这种方法有很大的好处,允许我取消不再可见的图块的连接。它允许地图最终从连接/服务器错误等恢复。

如果您想要摆脱这种“轮询”方法,平铺图层将需要导出许多内部结构,例如它已缓存的区块以及它当前感兴趣的区域。