我正在构建一个应用程序,您可以从手机中选择图像或使用相机制作新图像。问题是选择内部图像。首先我使用ImagepickerController,其中弹出一个新的Controller,我可以选择我想要的图像。后来我决定改变那种设计方法,但是将我手机中的所有图片嵌入主屏幕(当你进入应用程序时显示的那个),你可以通过点击它来选择每个图像(所以没有新的控制器弹出向上)。而且存在问题。阅读图片并将其加载到我的collectionview中需要花费太多时间(阅读图片是主要问题)。我的手机上有超过1000张照片,应用程序需要7秒钟才能读取100张照片(比它崩溃了,不知道为什么,也许是一些内存问题,没有进一步查看它bcz我的主要问题是阅读性能) 。
为了阅读我正在使用PHAssetCollection
,这是代码:
let allPhotosResult = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: nil)
let imageManager = PHCachingImageManager()
allPhotosResult.enumerateObjects({(object: AnyObject!,
count: Int,
stop: UnsafeMutablePointer<ObjCBool>) in
if object is PHAsset{
let imgAsset = object as! PHAsset
countI += 1
if countI > 100 {
return
}
let imageSize = CGSize(width: imgAsset.pixelWidth,
height: imgAsset.pixelHeight)
let options = PHImageRequestOptions()
options.deliveryMode = .fastFormat
options.isSynchronous = true
imageManager.requestImage(for: imgAsset,
targetSize: imageSize,
contentMode: .aspectFill,
options: options,
resultHandler: {
(image, info) -> Void in
self._images.append(image!)
}
})
}
})
我退出了100张图片bcz,然后他们正在显示,但这不是问题,我认为我将能够解决这个问题。
那么,是否有更快的方式来读取所有图像并将它们作为缩略图加载到我的集合视图中?我没有任何流行的照片应用程序,但我下载了其中一些以了解他们的表现如何,Instagram非常令人印象深刻。所有图像都没有任何延迟,这意味着必须有一种方法可以让它们快速完成。即使应用程序没有运行,也许他们会在后台获取它们?
此致
P.S。 - 啊是的,我知道我可以执行读取异步,但这并没有解决我的问题bcz延迟仍然存在