Вам не нужно разбивать на страницы.Загрузка занимает много времени, потому что вы предварительно загружаете все изображения.
Просто прекратите предварительную загрузку изображений в память и просто получите соответствующее изображение, когда оно действительно необходимо.
Для этогодобавить fetchResult
в качестве переменной экземпляра:
private var fetchResult: PHFetchResult?
Заменить
if let fetchResult : PHFetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions) {
if fetchResult.count > 0 {
for i in 0..<fetchResult.count{
imgManager.requestImage(for: fetchResult.object(at: i) as! PHAsset, targetSize: CGSize(width: 200, height: 200), contentMode: .aspectFill, options: requestOptions, resultHandler: {
image , error in
self.imageArray.append(image!)
})
}
}
на
if let fetchResult : PHFetchResult = PHAsset.fetchAssets(with: .image, options: fetchOptions)
{
self.fetchResult = fetchResult
}
Заменить return imageArray.count
на return self.fetchResult?.count ?? 0
И наконец:
let imageView = cell.viewWithTag(1) as! UIImageView
imageView.image = imageArray[indexPath.row]
с
imgManager.requestImage(for: fetchResult!.object(at: i) as! PHAsset, targetSize: CGSize(width: 200, height: 200), contentMode: .aspectFill, options: requestOptions, resultHandler: { image , error in
let currentIndexPath = collectionView.indexPath(for: cell)
if (currentIndexPath.compare(indexPath) == .orderedSame) {
let imageView = cell.viewWithTag(1) as! UIImageView
imageView.image = image
}
})