Photos(PHChange)
Photos(PHObjectChangeDetails)
Photos(PHFetchResultChangeDetails)
PHFetchResultChangeDetails主要用于记录PHFetchResult的变动,这样可以同时判断多个数据是否有变动。
1 获取PHFetchResult
public var fetchResultBeforeChanges: PHFetchResult { get }
public var fetchResultAfterChanges: PHFetchResult { get }
2 获取变动信息
public var hasIncrementalChanges: Bool { get }
public var removedIndexes: NSIndexSet? { get }
public var removedObjects: [PHObject] { get }
public var insertedIndexes: NSIndexSet? { get }
public var insertedObjects: [PHObject] { get }
public var changedIndexes: NSIndexSet? { get }
public var changedObjects: [PHObject] { get }
public func enumerateMovesWithBlock(handler: (Int, Int) -> Void)
/// 是否有移动
public var hasMoves: Bool { get }
3 比较PHFetchResult
public convenience init(fromFetchResult fromResult: PHFetchResult, toFetchResult toResult: PHFetchResult, changedObjects: [PHObject])
4 实战演练
func photoLibraryDidChange(changeInfo: PHChange!) {
dispatch_async(dispatch_get_main_queue()) {
if let albumChanges = changeInfo.changeDetailsForObject(self.displayedAlbum) {
self.displayedAlbum = albumChanges.objectAfterChanges as PHAssetCollection
self.navigationController.navigationItem.title = self.displayedAlbum.localizedTitle
}
if let collectionChanges = changeInfo.changeDetailsForFetchResult(self.assetsFetchResults) {
self.assetsFetchResults = collectionChanges.fetchResultAfterChanges
if collectionChanges.hasIncrementalChanges {
var removedPaths: [NSIndexPath]?
var insertedPaths: [NSIndexPath]?
var changedPaths: [NSIndexPath]?
if let removed = collectionChanges.removedIndexes {
removedPaths = self.indexPathsFromIndexSet(removed)
}
if let inserted = collectionChanges.insertedIndexes {
insertedPaths = self.indexPathsFromIndexSet(inserted)
}
if let changed = collectionChanges.changedIndexes {
changedPaths = self.indexPathsFromIndexSet(changed)
}
self.collectionView.performBatchUpdates(
{
if removedPaths {
self.collectionView.deleteItemsAtIndexPaths(removedPaths)
}
if insertedPaths {
self.collectionView.insertItemsAtIndexPaths(insertedPaths)
}
if changedPaths {
self.collectionView.reloadItemsAtIndexPaths(changedPaths)
}
if (collectionChanges.hasMoves) {
collectionChanges.enumerateMovesWithBlock() { fromIndex, toIndex in
let fromIndexPath = NSIndexPath(forItem: fromIndex, inSection: 0)
let toIndexPath = NSIndexPath(forItem: toIndex, inSection: 0)
self.collectionView.moveItemAtIndexPath(fromIndexPath, toIndexPath: toIndexPath)
}
}
}, completion: nil)
} else {
self.collectionView.reloadData()
}
}
}
}
其他
源代码
Swift
参考资料
Photos Framework Reference
PHChange Class Reference
PHFetchResultChangeDetails Class Reference
文档修改记录
版权所有
CSDN:http://blog.csdn.net/y550918116j
GitHub:https://github.com/937447974/Blog
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)