iOS应用:显示大量小图片时出现滞后问题

时间:2012-12-08 14:16:13

标签: iphone ios image uiimageview uiimage

环境:

我正在创建一个“photo mosaic”应用,我尝试在屏幕上同时显示1024(32 * 32)张小图像(视网膜大小 - > w:30px h:20px)。总的来说,它的大小与全屏图像大小相同。

问题:

我加载1024个UIImages,创建1024个UIImageViews,并将它们全部添加到UIView中。当我滚动到这个视图时,有一个很大的滞后:在iPhone4(iOS 5)和iPhone5(iOS 6)上进行测试。它只是出现在iPhone4上,在iPhone5上很好。 (假设iPhone5有更好的CPU,所以我认为这是合理的。)

我的想法:

假设所有图像都已从内存中的本地目录加载(使用方法“imageNamed”),所以我认为问题必须在步骤显示/渲染图像的某处。

所以关于它的任何想法?任何想法都会有所帮助。

非常感谢,

更新

在我接受了@Antwan van Houdt的建议后,情况要好得多。这是主要代码:

-(void)updateCoverImageView:(UIImageView *)smallImage{
    UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0f);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [self.coverImageView.layer renderInContext:ctx];
    [smallImage.image drawInRect:smallImage.frame];
    self.coverImageView.image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
}

然后你只需将smallImage的alpha值设置为零,这样系统就不会渲染它们。封面图片将取代它。这适用于因同时显示大量UIView而导致的滞后问题。

2 个答案:

答案 0 :(得分:3)

每张图片都在自己的视野中吗?

在任何一种情况下,对于如此大量的图像,您应该考虑在1个视图中绘制它们,如果绘图方法仍然太慢,您可以绘制一次,将视图渲染为图像,然后简单地绘制该图像因为它是缓存显示。

苹果有几个指南可以处理自定义视图绘制的性能以及类似的东西..你应该给他们一个阅读。

答案 1 :(得分:0)

不知道代码的完整细节,这样的任何事情都应该在后台线程上完成。我会读取图形上下文,宏中央调度,然后使用这两个概念在另一个线程中创建结果图像,然后获取结果图像并将其显示在主线程中。

因为你有许多图像都可以并行处理,所以可以使用GCD快速完成。

如果您可以发布代码,我可以帮助您优化代码。