Commit b7cefc98 by Daniel Dahan

updated PhotoLibrary with change delegation methods

parent 658026d5
...@@ -88,6 +88,13 @@ public protocol PhotoLibraryDelegate { ...@@ -88,6 +88,13 @@ public protocol PhotoLibraryDelegate {
*/ */
@objc @objc
optional func photoLibrary(photoLibrary: PhotoLibrary, beforeChanges: PHObject, afterChanges: PHObject, assetContentChanged: Bool, objectWasDeleted: Bool) optional func photoLibrary(photoLibrary: PhotoLibrary, beforeChanges: PHObject, afterChanges: PHObject, assetContentChanged: Bool, objectWasDeleted: Bool)
/**
A delegation method that is executed when there is a change in the
fetchResult object.
*/
@objc
optional func photoLibrary(photoLibrary: PhotoLibrary, fetchBeforeChanges: PHFetchResult<PHObject>, fetchAfterChanges: PHFetchResult<PHObject>)
} }
@objc(PhotoLibrary) @objc(PhotoLibrary)
...@@ -243,18 +250,47 @@ public class PhotoLibrary: NSObject { ...@@ -243,18 +250,47 @@ public class PhotoLibrary: NSObject {
// return result // return result
// } // }
// //
public func performChanges(_ changeBlock: () -> Void, completionHandler: ((Bool, NSError?) -> Void)? = nil) {
PHPhotoLibrary.shared().performChanges(changeBlock, completionHandler: completionHandler) /**
Performes an asynchronous change to the PHPhotoLibrary database.
- Parameter _ block: A transactional block that ensures that
all changes to the PHPhotoLibrary are atomic.
- Parameter completion: A completion block that is executed once the
transaction has been completed.
*/
public func performChanges(_ block: () -> Void, completion: ((Bool, NSError?) -> Void)? = nil) {
PHPhotoLibrary.shared().performChanges(block, completionHandler: completion)
} }
/**
Retrieves an optional UIImage for a given PHAsset that allows for a targetSize
and contentMode.
- Parameter for asset: A PHAsset.
- Parameter targetSize: A CGSize.
- Parameter contentMode: A PHImageContentMode.
- Parameter options: A PHImageRequestOptions.
- Parameter completion: A completion block.
- Returns: A PHImageRequestID.
*/
public func image(for asset: PHAsset, targetSize: CGSize, contentMode: PHImageContentMode, options: PHImageRequestOptions?, completion: (UIImage?, [NSObject: AnyObject]?) -> Void) -> PHImageRequestID { public func image(for asset: PHAsset, targetSize: CGSize, contentMode: PHImageContentMode, options: PHImageRequestOptions?, completion: (UIImage?, [NSObject: AnyObject]?) -> Void) -> PHImageRequestID {
return PHImageManager.default().requestImage(for: asset, targetSize: targetSize, contentMode: contentMode, options: options, resultHandler: completion) return PHImageManager.default().requestImage(for: asset, targetSize: targetSize, contentMode: contentMode, options: options, resultHandler: completion)
} }
/**
Retrieves an optional Data object for a given PHAsset.
- Parameter for asset: A PHAsset.
- Parameter options: A PHImageRequestOptions.
- Parameter completion: A completion block.
- Returns: A PHImageRequestID.
*/
public func data(for asset: PHAsset, options: PHImageRequestOptions?, completion: (Data?, String?, UIImageOrientation, [NSObject: AnyObject]?) -> Void) -> PHImageRequestID { public func data(for asset: PHAsset, options: PHImageRequestOptions?, completion: (Data?, String?, UIImageOrientation, [NSObject: AnyObject]?) -> Void) -> PHImageRequestID {
return PHImageManager.default().requestImageData(for: asset, options: options, resultHandler: completion) return PHImageManager.default().requestImageData(for: asset, options: options, resultHandler: completion)
} }
/**
Cance;s an image request for a given PHImageRequestID.
- Parameter for requestID: A PHImageRequestID.
*/
public func cancel(for requestID: PHImageRequestID) { public func cancel(for requestID: PHImageRequestID) {
PHImageManager.default().cancelImageRequest(requestID) PHImageManager.default().cancelImageRequest(requestID)
} }
...@@ -268,13 +304,11 @@ extension PhotoLibrary: PHPhotoLibraryChangeObserver { ...@@ -268,13 +304,11 @@ extension PhotoLibrary: PHPhotoLibraryChangeObserver {
photo library. photo library.
*/ */
public func photoLibraryDidChange(_ changeInfo: PHChange) { public func photoLibraryDidChange(_ changeInfo: PHChange) {
// Notify about the general change.
delegate?.photoLibrary?(photoLibrary: self, didChange: changeInfo) delegate?.photoLibrary?(photoLibrary: self, didChange: changeInfo)
guard let result = fetchResult else { // Notifiy about specific changes.
return fetchResult?.enumerateObjects(options: EnumerationOptions.concurrent) { [weak self, changeInfo = changeInfo] (collection, _, _) in
}
result.enumerateObjects(options: []) { [weak self, changeInfo = changeInfo] (collection, _, _) in
guard let s = self else { guard let s = self else {
return return
} }
...@@ -289,5 +323,15 @@ extension PhotoLibrary: PHPhotoLibraryChangeObserver { ...@@ -289,5 +323,15 @@ extension PhotoLibrary: PHPhotoLibraryChangeObserver {
s.delegate?.photoLibrary?(photoLibrary: s, beforeChanges: details.objectBeforeChanges, afterChanges: afterChanges, assetContentChanged: details.assetContentChanged, objectWasDeleted: details.objectWasDeleted) s.delegate?.photoLibrary?(photoLibrary: s, beforeChanges: details.objectBeforeChanges, afterChanges: afterChanges, assetContentChanged: details.assetContentChanged, objectWasDeleted: details.objectWasDeleted)
} }
guard let result = fetchResult as? PHFetchResult<AnyObject> else {
return
}
guard let details = changeInfo.changeDetails(for: result) else {
return
}
delegate?.photoLibrary?(photoLibrary: self, fetchBeforeChanges: details.fetchResultBeforeChanges, fetchAfterChanges: details.fetchResultAfterChanges)
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment