2
我有一個UICollectionView,其中我從相冊中加載用戶的所有照片。當用戶打開控制器時,所有照片都會被提取並存儲在一個數組中。點擊照片將創建一個黑色背景和該照片的更大版本的子視圖。再次點擊它將通過縮小轉換將其從超級視圖中移除。Swift - 從CollectionView中獲取相冊中的照片並保持分辨率
我的問題是,我不知道如何保持照片的原始大小以及保持較低的執行時間。將100張以上的照片加載到收藏中真的會傷害我的加載時間。
我不認爲有必要在更高的CGSize處獲取圖片,因爲我實際上希望它是單元格的邊界(每行有三個單元格)。
在0.20第二次執行時間
在3.0秒執行時間
我想實現的是保持一個非常300 300回到擷取圖片250由250返回擷取圖片執行時間短,清晰的縮略圖和該照片的高分辨率版本。我是否必須創建第二個線程才能在後臺加載所有內容,還是最好不要在我的viewDidLoad中調用我的函數?
var imageArray = [UIImage]()
func getPhotosFromAlbum() {
let imageManager = PHImageManager.default()
let requestOptions = PHImageRequestOptions()
requestOptions.isSynchronous = true
requestOptions.deliveryMode = .highQualityFormat
let fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
let fetchResult: PHFetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)
if fetchResult.count > 0 {
for i in 0..<fetchResult.count {
imageManager.requestImage(for: fetchResult.object(at: i), targetSize: CGSize(width: 300, height: 300), contentMode: .aspectFill, options: requestOptions, resultHandler: { image, error in
self.imageArray.append(image!)
})
}
} else {
self.collectionView?.reloadData()
}
}
一般來說,如果你正在做一些繁重的處理,最好在後臺線程中這樣做,這樣你就不會鎖定你的主線程或使UI交互緩慢。當然,在這種情況下,請記住在主線程上執行任何UI更新。作爲您正在做什麼的替代方法,緩存縮略圖對於您想要做什麼而言是有意義的?如果是的話,那麼這可能是一個你可能想要探索的選項,因爲那樣你就會擁有大部分你需要的圖像,並且只需要獲取新圖像的縮略圖。 – Fahim
謝謝!我添加了一個後臺線程來將圖片加載到我的collectionView中。我認爲它現在正常工作:-) –
偉大的:)我已將我的評論轉換爲答案。如果有幫助,請將其標記爲「正確」。 – Fahim