YBIBPhotoAlbumManager.m 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. //
  2. // YBIBPhotoAlbumManager.m
  3. // YBImageBrowserDemo
  4. //
  5. // Created by 波儿菜 on 2018/8/28.
  6. // Copyright © 2018年 波儿菜. All rights reserved.
  7. //
  8. #import "YBIBPhotoAlbumManager.h"
  9. #import "YBIBUtilities.h"
  10. @implementation YBIBPhotoAlbumManager
  11. + (void)getAVAssetWithPHAsset:(PHAsset *)phAsset completion:(nonnull void (^)(AVAsset * _Nullable))completion {
  12. PHVideoRequestOptions *options = [PHVideoRequestOptions new];
  13. options.networkAccessAllowed = YES;
  14. [[PHImageManager defaultManager] requestAVAssetForVideo:phAsset options:options resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * _Nullable audioMix, NSDictionary * _Nullable info) {
  15. completion(asset);
  16. }];
  17. }
  18. + (void)getImageDataWithPHAsset:(PHAsset *)phAsset completion:(nonnull void (^)(NSData * _Nullable))completion {
  19. PHImageRequestOptions *options = [PHImageRequestOptions new];
  20. options.networkAccessAllowed = YES;
  21. options.resizeMode = PHImageRequestOptionsResizeModeNone;
  22. // Only when this property is YES, the callback will in child thread.
  23. options.synchronous = YES;
  24. [[PHImageManager defaultManager] requestImageDataForAsset:phAsset options:options resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) {
  25. BOOL complete = ![[info objectForKey:PHImageCancelledKey] boolValue] && ![info objectForKey:PHImageErrorKey] && ![[info objectForKey:PHImageResultIsDegradedKey] boolValue];
  26. if (complete && imageData) {
  27. completion(imageData);
  28. } else {
  29. completion(nil);
  30. }
  31. }];
  32. }
  33. + (void)getPhotoAlbumAuthorizationSuccess:(void(^)(void))success failed:(void(^)(void))failed {
  34. PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
  35. switch (status) {
  36. case PHAuthorizationStatusDenied:
  37. if (failed) failed();
  38. break;
  39. case PHAuthorizationStatusRestricted:
  40. if (failed) failed();
  41. break;
  42. case PHAuthorizationStatusNotDetermined: {
  43. [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status){
  44. YBIB_DISPATCH_ASYNC_MAIN(^{
  45. if (status == PHAuthorizationStatusAuthorized) {
  46. if (success) success();
  47. } else {
  48. if (failed) failed();
  49. }
  50. })
  51. }];
  52. }
  53. break;
  54. case PHAuthorizationStatusAuthorized:
  55. if (success) success();
  56. break;
  57. }
  58. }
  59. @end