繁体   English   中英

从本地存储将UIImages加载到collectionView非常慢

Loading UIImages to collectionView from local storage is very slow

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我试图将一些本地保存的图像(使用Disk )加载到UICollectionView 每当我尝试获取它们时,应用程序就会挂起约10秒钟。 这告诉我我做错了什么。

我正在考虑异步加载它们,并且每当其中一个加载时,首先显示它。 但是,我将它们放在本地存储上,为什么要花这么多时间来加载它们?

图像是从用户的iPhone导入的,未压缩。 加载它们时,我正在加载整个图像(我知道这很不好)。

有人可以指出我正确的方向吗?

这是加载过程的第一部分:

   func fetchImage(path: String, imageID: String, completionHandler: @escaping (() throws -> UIImage) -> Void) {
    do {
        let imagePath = path + imageID + ".png"
        let image = try Disk.retrieve(imagePath, from: .documents, as: UIImage.self)
        completionHandler{ return image }
    } catch {
        completionHandler{ throw AlbumStoreError.CannotFetch("Cannot fetch Image with Error: \(error)") }
    }
}

这是第二部分

func fetchImages(path: String, completionHandler: @escaping ([UIImage]) -> Void) {
    albumsStore.fetchImages(path: path) { (images: () throws -> [UIImage]) in
        do{
            let images = try images()
            DispatchQueue.main.async {
                completionHandler(images)
            }
        } catch {
            DispatchQueue.main.async {
                completionHandler([])
            }
        }
    }
}

这是它的呈现方式。 基本上,它返回整个数组并重新加载集合视图

func presentImages(response: Collage.Images.Save.Response){
    let images = response.images
    let viewModel = Collage.Images.ViewModel(images: images)
    viewController?.displayImages(viewModel: viewModel) }
1 个回复

这里的问题不是访问本地存储的速度,而是图像的渲染。 您正在从存储中加载所有图像并进行渲染,即使对于可能不在屏幕上的集合视图单元,也要在显示任何内容之前进行渲染。

解决此问题的通常方法是让集合视图在单元格滚动查看时异步请求该单元格的图像。 也就是说,视图应从模型中提取每个图像,而不是尝试将模型中的图像推入视图。

关于如何正确执行此操作的完整说明太长,无法在此处找到答案,但是有许多示例和教程介绍了如何执行此操作,只是Google异步加载或延迟加载。 还要看看iOS 10中引入的预取API。

参见例如https://medium.com/capital-one-tech/smooth-scrolling-in-uitableview-and-uicollectionview-a012045d77f或有关预取的Apple文档: https : //developer.apple.com/documentation/uikit/ uicollectionviewdatasourceprefetching / prefetching_collection_view_data

2 从本地存储将dataURL加载到HTML Canvas中

我从本地存储区将dataURL加载到画布中时遇到了一些麻烦。 我设法将dataURL保存到本地存储中,当我进行console.log注销时,可以查看它: 我设法通过使用以下代码来保存它: 但是,当我尝试使用下面的代码放置该dataURL时,它不会执行任何操作。 ...

3 将视频和图片从本地存储加载到Google ChromeCast android

如何将本地视频URI /路径/文件设置为chromecast的MediaInfo.Builder()? 另外,任何人都可以帮我一个关于如何从Android存储本地加载图像和视频并将其转换为谷歌Chrome演员的代码片段? 阅读其他问题,但在那里已经提到在应用程序上创建本地服务器。 如果真的 ...

4 将图像从本地 android 存储加载到 WebView

是否可以将图片从本地 android 手机存储加载到 WebView? 基本上我想要做的是,拍照,然后在 WebView 中显示该图片(如预览图片),然后在填写更多信息后,将该图片与整个数据上传到数据库。 一切都在 android studio Java 代码中,WebView 显然是我从资产文件夹 ...

5 将图像保存并加载到本地存储

我尝试将少量图像保存(用于缓存建议)到本地存储中。 保存部分是这样完成的: 此方法有效,不会引发异常。 现在,不起作用的部分正在累积,从本地存储加载图像: 此代码始终会发生异常-文件存在,但无法加载图像。 错误在哪里? 这是将文件保存/加载到本地存储的正确方法吗? ...

2013-12-27 23:31:16 0 269   android
8 将更多数据加载到collectionView

我正在尝试将更多数据加载到集合视图。 发生的情况是,具有我已经拥有的图像的单元格再次出现在下一个新单元格中,其他一些单元格消失了,这真是一团糟。 我已经检查了所有数据源,以确保没有重复项,并且所有图像都是唯一的。 他以某种方式加载新单元格后,我滚动查看了以前的图像,并且随着我这样做的越 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM