3

环境:

我正在创建一个“照片马赛克”应用程序,我尝试同时在屏幕上显示 1024(32*32)张小图像(视网膜尺寸->w:30px h:20px)。这意味着总的来说,它与全屏图像大小相同。

问题:

我加载了 1024 个 UIImage,创建了 1024 个 UIImageView,并将它们全部添加到 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 导致的滞后问题。

4

2 回答 2

3

每个图像都在自己的视图中吗?

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

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

于 2012-12-08T14:19:00.973 回答
0

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

事实上,由于您有许多可以并行处理的图像,因此使用 GCD 可以非常快速地完成。

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

于 2012-12-08T14:26:27.547 回答