Как отобразить Live-фотографии Видео из библиотеки и отобразить в Collection-View в iOS Swift?
Для отображения живых фотографий
func fetchLivePhotos() {
let options = PHFetchOptions()
options.sortDescriptors = [ NSSortDescriptor(key: "creationDate", ascending: false) ]
options.predicate = NSPredicate(format: "(mediaSubtype & %d) != 0",PHAssetMediaSubtype.photoLive.rawValue)
DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async {
self.livePhotoAssets = PHAsset.fetchAssets(with: options)
DispatchQueue.main.async {
self.collectionView?.reloadData()
}
}
}
И для отображения в сеточном коде ниже
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MediaCell", for: indexPath) as! MediaCell
if let asset = livePhotoAssets?[indexPath.row]{
let options = PHImageRequestOptions()
options.isNetworkAccessAllowed = true
let targetSize = CGSize(width: 200, height: 200)
PHImageManager.default().requestImage(for: asset, targetSize: targetSize, contentMode: .aspectFill, options: options, resultHandler: { (image: UIImage?, info: [AnyHashable : Any]?) in
cell.backgroundImageView.image = image
})
}
cell.selectedImage.isHidden = true
return cell
}
И для получения видео я использую этот предикат
option.predicate = NSPredicate(format: "mediaType == %i",PHAssetMediaType.video.rawValue)
Но в Collectionview оба не отображаются
Любой знает
Заранее спасибо.!!!!
1 ответ
Попробуйте переопределить метод из протокола UICollectionViewDataSource:
public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if let count = livePhotoAssets?.count {
return count
}
return 0
}
также:
не забудьте установить ViewController в качестве источника данных табличного представления. не забудьте добавить свойство collectionView в раскадровку, если вы создаете его из раскадровки.
Я построил это и работает отлично.