let options = PHVideoRequestOptions() // , PHImageManager iCloud options.isNetworkAccessAllowed = true // options.deliveryMode = .automatic options.progressHandler = { progress, _, _, _ in // }
PHImageManager.default().requestPlayerItem(forVideo: asset, options: options, resultHandler: { playerItem, info in // playerItem }
let player = AVPlayer(playerItem: playerItem) let playerLayer = AVPlayerLayer(player: player) // playerLayer view player.play()
let options = PHLivePhotoRequestOptions() options.isNetworkAccessAllowed = true options.deliveryMode = .highQualityFormat options.progressHandler = { progress, _, _, _ in // }
PHImageManager.default().requestLivePhoto(for: asset, targetSize: targetSize, contentMode: .aspectFit, options: options, resultHandler: { livePhoto, info in // livePhoto })
livePhotoView.livePhoto = livePhoto // live- livePhotoView.startPlayback(with: .full)
PHPhotoLibrary.shared().register(observer)
func photoLibraryDidChange(_ changeInstance: PHChange) { // PHAsset ( fetchResult) // , guard let changes = changeInstance.changeDetails(for: fetchResult) else { return } // main queue, DispatchQueue.main.sync { // PHAsset fetchResult = changes.fetchResultAfterChanges // - // (, , , ) if changes.hasIncrementalChanges { // collectionView collectionView.performBatchUpdates({ // : // delete, insert, reload, move if let removed = changes.removedIndexes where removed.count > 0 { collectionView.deleteItems(at: removed.map { IndexPath(item: $0, section:0) }) } if let inserted = changes.insertedIndexes where inserted.count > 0 { collectionView.insertItems(at: inserted.map { IndexPath(item: $0, section:0) }) } if let changed = changes.changedIndexes where changed.count > 0 { collectionView.reloadItems(at: changed.map { IndexPath(item: $0, section:0) }) } changes.enumerateMoves { fromIndex, toIndex in collectionView.moveItem(at: IndexPath(item: fromIndex, section: 0), to: IndexPath(item: toIndex, section: 0)) } }) } else { // collectionView collectionView.reloadData() } } }
Source: https://habr.com/ru/post/319240/