UIScrollViewController
|-----UIImageView1, 2, 3, 4, 5...
我有一个UIScrollViewController
,它有几个子视图。每个子视图都包含一个UIImageview
,当滚动UIImageView
时,当前页面两侧的页面将使用
imageView = [[UIImageView alloc] initWithContentsOfFile:fileName];
但是当本地图像文件变得非常大(>2MB)时,滚动变得非常流畅,并且会卡住。
有没有办法避免这种情况?例如,使用缓存还是异步执行?
您可以在另一个线程中异步加载图像,或者如果您仅支持高于 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];
});
});
如果你不能使用块,你可以在不同的线程中执行,但它会更复杂一些。
无论如何,我建议:
最好使用"虚拟"或"微调器"创建添加到滚动视图中的UIImageViews,然后当用户交互停止(通过委托方法检测到)时,您可以重新加载可见的图像视图。
当用户滚动时,最好为所需的图像加载和缓存UIImage对象(例如,将它们存储在数组或字典中)。
缩放 UIImage 内容以适合 ScrollView 中的 UIImageView 框架。这样,在渲染期间,UIImage 将不会"自动缩放"提供的图像,因此速度会更快。