繁体   English   中英

从超级视图中删除后保持图像可见

[英]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]; 在委托方法scrollViewWillBeginZoomingscrollViewWillBeginDragging 这导致在单击另一个选项之间的时间中,存储器最多包含两张图像,并且用户滚动或缩放。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM