PHPhotoLibrary+RITLPhotoStore.m 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. //
  2. // PHPhotoLibrary+RITLPhotoStore.m
  3. // RITLPhotoDemo
  4. //
  5. // Created by YueWen on 2018/3/7.
  6. // Copyright © 2018年 YueWen. All rights reserved.
  7. //
  8. #import "PHPhotoLibrary+RITLPhotoStore.h"
  9. #import "PHFetchResult+RITLPhotos.h"
  10. #import "RITLKit.h"
  11. @implementation PHPhotoLibrary (RITLPhotoStore)
  12. - (void)fetchAlbumRegularGroupsByUserLibrary:(void (^)(NSArray<PHAssetCollection *> * _Nonnull))complete
  13. {
  14. [self fetchAlbumRegularGroups:^(NSArray<PHAssetCollection *> * _Nonnull collections) {
  15. //进行排序
  16. NSMutableArray <PHAssetCollection *> *sortCollections = [NSMutableArray arrayWithArray:collections];
  17. //选出对象
  18. PHAssetCollection *userLibrary = [sortCollections ritl_filter:^BOOL(PHAssetCollection * _Nonnull item) {
  19. return (item.assetCollectionSubtype == PHAssetCollectionSubtypeSmartAlbumUserLibrary);
  20. }].ritl_safeFirstObject;
  21. if (userLibrary) {
  22. //进行变换
  23. [sortCollections removeObject:userLibrary];
  24. [sortCollections insertObject:userLibrary atIndex:0];
  25. }
  26. complete([sortCollections ritl_filter:^BOOL(PHAssetCollection * _Nonnull item) {
  27. PHAssetCollectionSubtype subType = item.assetCollectionSubtype;
  28. //取出不需要的数据
  29. return !(subType == PHAssetCollectionSubtypeSmartAlbumAllHidden || [item.localizedTitle isEqualToString:NSLocalizedString(@"Recently Deleted", @"")]);
  30. }]);
  31. }];
  32. }
  33. - (void)fetchAlbumRegularGroups:(void (^)(NSArray<PHAssetCollection *> * _Nonnull))complete
  34. {
  35. [self fetchAssetAlbumRegularCollection:^(PHFetchResult * _Nullable albumRegular) {
  36. [albumRegular transToArrayComplete:^(NSArray<id> * _Nonnull group, PHFetchResult * _Nonnull result) {
  37. complete(group);
  38. }];
  39. }];
  40. }
  41. /// 获得SmartAlbum
  42. - (void)fetchAssetAlbumRegularCollection:(void(^)(PHFetchResult * _Nullable albumRegular))albumRegular
  43. {
  44. [self.class handlerWithAuthorizationAllow:^{
  45. PHFetchOptions *fetchOptions = PHFetchOptions.new;
  46. albumRegular([PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:fetchOptions]);
  47. }];
  48. }
  49. #pragma mark - 进行权限检测后的操作
  50. ///
  51. + (void)handlerWithAuthorizationAllow:(void(^)(void))hander
  52. {
  53. [self authorizationStatusAllow:^{
  54. hander();
  55. } denied:^{}];
  56. }
  57. #pragma mark - 权限检测
  58. + (void)authorizationStatusAllow:(void(^)(void))allowHander denied:(void(^)(void))deniedHander
  59. {
  60. switch (PHPhotoLibrary.authorizationStatus)
  61. {
  62. //准许
  63. case PHAuthorizationStatusAuthorized: allowHander(); break;
  64. //待获取
  65. case PHAuthorizationStatusNotDetermined:
  66. {
  67. [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
  68. dispatch_async(dispatch_get_main_queue(), ^{
  69. if (status == PHAuthorizationStatusAuthorized) { allowHander(); }//允许,进行回调
  70. else { deniedHander(); }
  71. });
  72. }];
  73. } break;
  74. //不允许,进行无权限回调
  75. case PHAuthorizationStatusDenied:
  76. case PHAuthorizationStatusRestricted: deniedHander(); break;
  77. }
  78. }
  79. @end