我们正在构建一个图像目录 iPad 应用程序。我们使用 2 种类型的图像:低分辨率缩略图(250 * 500 像素)和高分辨率完整图像(2048X2048 像素)。高分辨率图像大小为 200kb 到 10mb。我们为下载高分辨率图像实现了延迟加载和多线程。
作为一个图像目录应用程序,总图像可以在 200 到 500 个图像之间。此应用程序具有离线支持,因此我们将图像存储在应用程序文档目录中,以便稍后显示所有下载的图像。有图像按字母排序的功能,所以我们必须通过 UIScrollView 在屏幕上同时显示所有低分辨率图像。
当调用新的高分辨率图像时,每次第一次打开图像时,图像通常需要 3-8 秒。这几乎冻结了应用程序,用户必须等待 3-8 秒才能执行其他任何操作。
我的开发人员几乎说过,没有简单的方法可以让用户停止当前操作并移动到下一个图像,直到完整的当前图像下载到内存。
专家们你认为我们应该能够以这样一种方式实现代码,即当下载高分辨率图像时,任何用户操作都会超越当前的高分辨率图像下载。例如,手指滑动将启用标题栏(包含后退按钮、设置按钮)并将用户带到下一个图像?
感谢您的及时回复家伙。但是正如我们在问题中提到的,我们使用了延迟加载/多线程,这意味着我们使用了 NSURLConnection 异步请求。即使不是文本数据,我们也没有使用主线程进行下载。
我们已经创建了一个带有 NSURLConnection 和委托的图像下载器类。我们已经编写了自定义协议,以便在每个图像请求成功/失败后向相应的控制器发送通知。
@protocol TImageDownloaderDelegate
-(void)imageDownloadedSuccessfully:(ImageDownloader *)inDownloader;
-(void)prImageDownloadedSuccessfully :(ImageDownloader *)inDownloader;
@end
问题是,我们使用 UIScrollView 在同一个屏幕上有多个(超过 160 个)图像,并且对于每个图像,我们都有高分辨率图像(大小在 200KB 到 10 MB 之间),我们正在下载高分辨率图像,并且在下载每个图像之后我们令人耳目一新的景色。所以有时滚动在一次又一次地渲染视图时不是很流畅。所以我们正在寻找一些方法来提高应用程序的性能。