我正在制作一款iOS应用,如果内存不是问题,屏幕上会同时加载数千张图片。显然,这不是一个好方法,所以我想做的是" unrender"这些图像中的一些,因此在任何给定点上只有少数图像在屏幕上,然后"重新呈现"当用户采取某些行动时。所以我的问题是,我怎么能这样做?
或者,如果它更容易,所有图像都是相同的;我知道这可能听起来很奇怪,但是我的应用程序可能需要在屏幕上加载数千个相同的图像。既然如此,内存管理真的不是一个问题,因为它们都引用了同一个文件吗? (而不是一个问题,我的意思是我可以使用hidden
属性来改变屏幕上的内容和内容)。如果我能做到这一点,我就是在做
UIImage *image = [[UIImage alloc] initWithContentsOfFile:@"image.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[scrollView addSubview:imageView];
(scrollView是UIScrollView
,我用来向UIImageView
提供缩放功能。但问题是,当我执行此操作时,UIImageView
根本无法呈现。
任何其他想法或建议当然值得赞赏,并提前感谢:D
答案 0 :(得分:1)
答案取决于您的UI。当你说成千上万张图片时,一次可以看到多少张图片。它有点像一个巨大的照片库,在任何给定的时间只有少数几个可见吗?在这种情况下,您可能只是维护当时可见的图像的视图,并且滚动到可见屏幕的图像将不会有任何与它们关联的视图,直到它们滚动(以及那些可见但是现在滚动将被释放)。
但是,如果你正在处理一个不同的问题,大量的小图像,其中许多可能同时可见,这是一个不同的问题(用links解决,如qegal提供的那样)。 / p>
我认为你正在尝试做更像后者的事情,但无论如何,你必须让我们更好地了解图像的本质以及我们在这里处理的用户体验。
<强>更新强>
听起来你正在做更像前者的事情。在那种情况下......
查看PhotoScroller,Apple通过大量图片导航的示例(应用中只有三张图片,但您明白了这一点。)
就个人而言,我有一个低技术实现,我有一个照片浏览器,我通过大量的图像水平平移(UIPanGestureRecognizer)(大约100,但可以很容易很多,更多)。但是,我的视图控制器只有三个UIImageView控件,一个用于显示主图像,一个用于前一个图像(并且它的框架设置在屏幕左侧),另一个用于下一个图像(和它的框架设置在屏幕右侧)。当我收到来自UIPanGestureRecognizer的连续反馈时,我通过手势识别器的translationInView的水平部分调整所有三个帧(我已经看到使用滚动视图来协调图像的移动的其他实现,但是这个想法仍然是相同)。当我放手时,我的手势识别器会判断我是否成功滑动到下一个或上一个图像,完成该动画,完成后,它会重新定位三个UIImageViews(前一个屏幕左侧,当前屏幕,下一个屏幕外右侧)并使用适当的“当前”,“前一个”和“下一个”图像重新加载三个图像视图。此时,您已准备好使用手势识别器进行另一次滑动。