【发布时间】:2012-08-26 04:07:02
【问题描述】:
我从 Apple 的 PhotoScroller 示例代码中提取了一些代码以使用 CATiledLayer。我有一张从互联网上加载的 8000x7000px 的图片,在图块中。
这是我的应用程序中的一种地图功能。我还有两张几乎相同的图像,具有不同的叠加层(尝试仅添加叠加层而没有运气)。
我有一个UISegmentedControl 在三个选项之间切换,我希望 imageView 从所选图像加载图像。因此,如果用户放大其中一个图像并选择另一个选项,则比例和坐标保持不变,并且 imageView 将所选图像加载到必要的平铺点中。
我已经部分解决了这个问题。或者,我实际上已经解决了这个问题,但是当我选择另一个选项时,调用函数[imageView removeFromSuperview]; 时整个屏幕变黑。在几秒钟内变黑后(取决于互联网速度),它会显示正确的图块。
如果可能,我希望图层“淡入”到下一层。您可能知道,当使用CATiledLayer 时,第一层是低分辨率的整个图像,但是当放大时,必要的图块会“淡入”到具有较小图块的下一层。
我基本上需要给(TilingView*)imageView 一个“重新加载”命令,并希望它“淡出”最后一张图像。
我试图注释掉[imageView removeFromSuperview];,这实际上让我接近了我想要的。当我放大并选择另一个选项时,新图像实际上淡化了旧图像,但是,当我缩小时,旧图像明显停留在背景中(在新图像后面),没有任何反应。稍后我需要将其从 superView 中删除,但我无法再访问它,因为新图像已取代了 imageView 的位置。我知道人们可能想在这里查看代码,但我真的不知道要显示什么代码。而且CATiledLayer 的记录很差,我真的很难理解发生了什么。
【问题讨论】:
-
如果您从 inet 加载完整的切片而不是 jpeg,这似乎需要更多时间。您可能想查看 PhotoScrollerNetwork(在 github 上) - 它可以让您下载 jpeg,它会为您平铺它们,并允许并发下载。您也可以将它与 Quartz only 或 libjpegturbo 一起使用。
-
@DavidH 是的,我已经检查过了,但这不会花更多时间吗?我想必须下载整个图像才能让 imageview 显示任何内容?而不仅仅是所需的瓷砖?由于这是一个地图功能,用户可能永远不会查看所有图像的整个深度层,因此不需要下载整个图像..
-
如果您可以先下载第一个小视图的图块,那么您是正确的,这在时间上是一个巨大的胜利。
-
其实你刚刚给了我一个关于如何加速 PSN 的好主意——使用渐进式 jpeg。这将允许小图像快速出现。而不是从大到小做相反的事情!谢谢!
标签: iphone objective-c ios cocoa-touch catiledlayer