【发布时间】:2012-06-03 20:06:16
【问题描述】:
我正在研究 Apple ScrollViewSuite 和 Photoscroller,我想知道在通过 NSURLConnection 下载图块时如何实现 CATiledLayer: 如何通知 drawRect: 已下载特定图块以及如何跟踪与每个图块关联的矩形和上下文?
问候弗雷德里克
【问题讨论】:
-
好吧,请回答,我相信你们……
标签: iphone objective-c
我正在研究 Apple ScrollViewSuite 和 Photoscroller,我想知道在通过 NSURLConnection 下载图块时如何实现 CATiledLayer: 如何通知 drawRect: 已下载特定图块以及如何跟踪与每个图块关联的矩形和上下文?
问候弗雷德里克
【问题讨论】:
标签: iphone objective-c
完成下载后,缓存结果,然后使用磁贴的矩形调用 setNeedsDisplayInRect:。它将再次调用 drawLayer:inContext:,然后您可以绘制缓存的结果。
【讨论】:
我认为没有办法这样做,因为它应该以其他方式工作。瓷砖在单独的线程中呈现,因此您可以开始从drawLayer:InContext: 方法下载瓷砖。当然不要忘记为下载的图块实现缓存,否则您将杀死您的应用程序和发票:-)
【讨论】:
没有办法从平铺层中获取必要的信息。我目前只是每隔几秒钟就使图层无效/重绘一次,以获得某种“最终一致性”。也就是说,在某个时间点,我希望所有可见的图块都已加载和缓存(由我自己的控制器)。然后重绘将使用我的缓存中的图像简单地渲染所有图块。
为此,您需要能够计算可见图块集并(重新)下载它们(如果它们没有被缓存)。这种方法的巨大好处是允许我取消不再可见的磁贴的连接。它允许地图最终从连接/服务器错误等中恢复。
如果您想摆脱这种“轮询”方法,切片层需要导出大量内部信息,例如它缓存了哪些切片以及当前对哪些切片感兴趣。
【讨论】: