[英]Keeping an image in view after removed from superview
我从Apple的PhotoScroller示例代码中提取了一些代码,以使用CATiledLayer
。 我有一张从互联网加载的8000x7000px图像,位于图块中。
这是我应用程序中的一种地图功能。 我也有两个几乎相同的图像,但具有不同的叠加层(试图仅添加叠加层而没有运气)。
我有一个UISegmentedControl
可以在三个选项之间切换,并且我希望imageView从选定的图像中加载图像。 因此,如果用户放大其中一幅图像并选择另一个选项,则比例和坐标保持不变,并且imageView会将所选图像加载到必要的图块中。
我已经部分管理了。 或者,实际上我已经管理好了,但是当我选择另一个选项时,当功能[imageView removeFromSuperview];
时,整个屏幕变黑[imageView removeFromSuperview];
叫做。 在几秒钟内变黑后(取决于互联网速度),它会显示正确的图块。
如果可能,我希望该图层“淡入”到下一层。 如您所知,当使用CATiledLayer
,第一层是低分辨率的整个图像,但是在放大时,必要的图块会以较小的图块“淡入”到下一层。
我基本上需要给(TilingView*)imageView
一个“重新加载”命令,并希望它“淡入”最后一个图像。
我试图注释掉[imageView removeFromSuperview];
,这实际上使我接近了想要的东西。 当我放大并选择另一个选项时,新图像实际上在旧图像上消失了,但是,当我缩小图像时,旧图像显然在背景中(新图像后面)残留,对任何内容均无响应。 稍后我需要将其从superView中删除,但是由于新图像已取代它作为imageView,因此我不再可以使用它。 我知道人们可能想在这里看到代码,但是我真的不知道要显示什么代码。而且CATiledLayer
文档非常差,我真的很难理解正在发生的事情。
我通过一些粗略的代码使它起作用。 可能还有其他更好的解决方案,但这是我目前所知道的唯一解决方案。
问题是当我删除[imageView removeFromSuperview];
,它没有卸载最后一张图像,因此将其永久保存在内存中。 由于它不受缩放和滚动的影响,因此当我缩小时,它始终位于背景中。 如果我要在选项之间多次切换,则背景中会添加多个图像。
我只是简单地创建了一个“ helper
”。 一个新的imageView
,它在切换选项时获取旧imageView
的内容,而尚未从超级视图中删除它,因为过早删除会导致在尚未加载新图像时出现黑屏。
我现在称[helper removeFromSuperview];
在委托方法scrollViewWillBeginZooming
和scrollViewWillBeginDragging
。 这导致在单击另一个选项之间的时间中,存储器最多包含两张图像,并且用户滚动或缩放。
注意:如果用户在切换UISegmentedControl
选项后立即滚动或缩放,则它将变为黑色,因为尚未加载新图像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.