1

我从 Apple 的 PhotoScroller 示例代码中提取了一些代码以使用CATiledLayer. 我有一张从互联网上加载的 8000x7000px 的图像,在瓷砖中。

这是我的应用程序中的一种地图功能。我还有两个几乎相同的图像,具有不同的叠加层(尝试仅添加叠加层而没有运气)。

我必须UISegmentedControl在三个选项之间切换,并且我希望 imageView 从所选图像中加载图像。因此,如果用户放大其中一个图像并选择另一个选项,则比例和坐标保持不变,并且 imageView 将所选图像加载到必要的平铺点中。

我已经部分管理了这一点。或者,我实际上已经做到了这一点,但是当我选择另一个选项时,调用该函数时整个屏幕变黑[imageView removeFromSuperview];。在几秒钟内变黑(取决于互联网速度)后,它会显示正确的瓷砖。

如果可能,我希望图层“淡入”到下一层。您可能知道,在使用 时CATiledLayer,第一层是低分辨率的整个图像,但在放大时,必要的图块“淡入”到具有较小图块的下一层。

我基本上需要给出(TilingView*)imageView一个“重新加载”命令,并希望它在最后一张图像上“淡出”。

我试图注释掉[imageView removeFromSuperview];,这实际上让我接近了我想要的。当我放大并选择另一个选项时,新图像实际上淡化了旧图像,但是,当我缩小时,旧图像明显停留在背景中(在新图像后面),没有任何反应。稍后我需要将其从 superView 中删除,但我无法再访问它,因为新图像已取代了 imageView 的位置。我知道人们可能想在这里查看代码,但我真的不知道要显示什么代码。而且记录得CATiledLayer太差了,我真的很难理解发生了什么。

4

1 回答 1

1

我通过一些粗略的代码使它工作。可能还有其他更好的解决方案,但这是我目前知道的唯一一个。

问题是当我删除时[imageView removeFromSuperview];,它并没有卸载最后一张图像,因此让它永远存在于内存中。由于它不受缩放和滚动的影响,所以当我缩小时,它总是在后台。如果我要在选项之间切换多次,多张图片会在背景中叠加。

我只是创建了一个“ helper”,正如我所说的那样。一个 new imageView,它在切换选项时获取旧的内容imageView,而不是将其从超级视图中删除,因为当新图像尚未加载时,过早删除会导致黑屏。

我现在调用[helper removeFromSuperview];委托方法scrollViewWillBeginZooming和 in scrollViewWillBeginDragging。这导致在单击另一个选项和用户滚动或缩放之间的时间内,内存最多包含两个图像。

注意:如果用户在切换选项后立即滚动或缩放UISegmentedControl,它会变成黑色,因为新图像尚未加载。

于 2012-08-26T06:38:24.587 回答