Skip to content

Instantly share code, notes, and snippets.

@tilltue
Last active October 15, 2018 15:54
Show Gist options
  • Save tilltue/26718bc57184c1190b24ee9bb59ef9cc to your computer and use it in GitHub Desktop.
Save tilltue/26718bc57184c1190b24ee9bb59ef9cc to your computer and use it in GitHub Desktop.
apple document
extension TLPhotosPickerViewController: PHPhotoLibraryChangeObserver {
public func photoLibraryDidChange(_ changeInstance: PHChange) {
guard getfocusedIndex() == 0 else { return }
let addIndex = self.usedCameraButton ? 1 : 0
DispatchQueue.main.sync {
guard let changeFetchResult = self.focusedCollection?.fetchResult else { return }
guard let changes = changeInstance.changeDetails(for: changeFetchResult) else { return }
if changes.hasIncrementalChanges {
var deletedSelectedAssets = false
var order = 0
#if swift(>=4.1)
self.selectedAssets = self.selectedAssets.enumerated().compactMap({ (offset,asset) -> TLPHAsset? in
var asset = asset
if let phAsset = asset.phAsset, changes.fetchResultAfterChanges.contains(phAsset) {
order += 1
asset.selectedOrder = order
return asset
}
deletedSelectedAssets = true
return nil
})
#else
self.selectedAssets = self.selectedAssets.enumerated().flatMap({ (offset,asset) -> TLPHAsset? in
var asset = asset
if let phAsset = asset.phAsset, changes.fetchResultAfterChanges.contains(phAsset) {
order += 1
asset.selectedOrder = order
return asset
}
deletedSelectedAssets = true
return nil
})
#endif
if deletedSelectedAssets {
self.focusedCollection?.fetchResult = changes.fetchResultAfterChanges
self.collectionView.reloadData()
}else {
self.collectionView.performBatchUpdates({ [weak self] in
guard let `self` = self else { return }
self.focusedCollection?.fetchResult = changes.fetchResultAfterChanges
if let removed = changes.removedIndexes, removed.count > 0 {
self.collectionView.deleteItems(at: removed.map { IndexPath(item: $0+addIndex, section:0) })
}
if let inserted = changes.insertedIndexes, inserted.count > 0 {
self.collectionView.insertItems(at: inserted.map { IndexPath(item: $0+addIndex, section:0) })
}
if let changed = changes.changedIndexes, changed.count > 0 {
self.collectionView.reloadItems(at: changed.map { IndexPath(item: $0+addIndex, section:0) })
}
changes.enumerateMoves { fromIndex, toIndex in
self.collectionView.moveItem(at: IndexPath(item: fromIndex, section: 0),
to: IndexPath(item: toIndex, section: 0))
}
})
}
}else {
self.focusedCollection?.fetchResult = changes.fetchResultAfterChanges
self.collectionView.reloadData()
}
if let collection = self.focusedCollection {
self.collections[getfocusedIndex()] = collection
self.albumPopView.tableView.reloadRows(at: [IndexPath(row: getfocusedIndex(), section: 0)], with: .none)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment