从superview中删除后保持图像在视野中

时间:2012-08-26 04:07:02

标签: iphone objective-c ios cocoa-touch catiledlayer

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

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

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

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

我希望图层能够褪色"如果可能的话,到下一层。您可能知道,在使用CATiledLayer时,第一层是低分辨率的整个图像,但放大时,必要的图块会消失" fade"使用较小的瓷砖进入下一层。

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

我试图评论[imageView removeFromSuperview];,这实际上让我接近我想要的东西。当我放大并选择另一个选项时,新图像实际上在旧图像上消失,但是,当我缩小时,旧图像显然在背景中(新图像后面)附近,没有响应任何内容。我需要稍后从superView中删除它,但我不再访问它,因为新图像已取代它作为imageView。我知道人们可能希望在这里看到代码,但我真的不知道要显示什么代码.. CATiledLayer很少被记录下来我真的很难理解发生了什么。< / p>

1 个答案:

答案 0 :(得分:1)

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

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

我只是创建了一个&#34; helper&#34;我称之为。一个新的imageView,它在切换选项时获取旧imageView的内容,而不是从超级视图中删除它,因为过早删除会在新图像没有时导致黑屏装完了。

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

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