1

UIScrollViewController

|-----UIImageView1, 2, 3, 4, 5...

我有一个UIScrollViewController有几个子视图。每个子视图都包含一个UIImageview,当滚动时UIImageView,当前页面两侧的页面将使用

imageView = [[UIImageView alloc] initWithContentsOfFile:fileName];

但是当本地图像文件变得非常大(> 2MB)时,滚动变得非常流畅,并且卡住了。

有没有办法避免这种情况?例如使用缓存还是异步执行?

4

1 回答 1

5

您可以在另一个线程中异步加载图像,或者如果您仅支持高于 4 的 iOS,则使用块执行它非常容易。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{
    UIImageView* imageView = [[[UIImageView alloc] initWithContentsOfFile:fileName]autorelease];       
    dispatch_async(dispatch_get_main_queue(), ^{
        //Maybe correct the frame too
        [self.view addSubview:imageView];
    });
});

如果你不能使用块,你可以在不同的线程中执行,但它有点复杂。

无论如何,我建议:

  • 最好使用“虚拟”或“微调器”创建添加到滚动视图的 UIImageView,然后当用户交互停止(通过委托方法检测)时,您可以重新加载可见的图像视图。

  • 当用户滚动时,最好为您想要的图像加载和缓存 UIImage 对象(例如将它们存储在数组或字典中)。

  • 缩放 UIImage 内容以适合 ScrollView 内的 UIImageView 框架。这样,在渲染期间, UIImage 不会“自动缩放”提供的图像,因此它会更快。

于 2012-06-04T10:11:38.813 回答