123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314 |
- //
- // HX_PhotoManager.h
- // HXPhotoPickerExample
- //
- // Created by Silence on 17/2/8.
- // Copyright © 2017年 Silence. All rights reserved.
- //
- #import <Foundation/Foundation.h>
- #import <Photos/Photos.h>
- #import "HXAlbumModel.h"
- #import "HXPhotoModel.h"
- #import "HXPhotoTools.h"
- #import "HXPhotoConfiguration.h"
- #import "HXCustomAssetModel.h"
- #import "HXPhotoTypes.h"
- @interface HXPhotoManager : NSObject
- /// init
- /// @param type 选择类型
- + (instancetype)managerWithType:(HXPhotoManagerSelectedType)type;
- - (instancetype)initWithType:(HXPhotoManagerSelectedType)type;
- /// 当前选择类型
- @property (assign, nonatomic) HXPhotoManagerSelectedType type;
- /// 相关配置
- @property (strong, nonatomic) HXPhotoConfiguration *configuration;
- /// 控制器生命周期,根据Class来判断具体类型,具体包括
- /// [HXAlbumListViewController、HXCustomCameraViewController、HXCustomNavigationController、HXPhotoViewController、HXPhotoPreviewViewController]
- @property (copy, nonatomic) void (^ viewWillAppear)(UIViewController *viewController);
- @property (copy, nonatomic) void (^ viewDidAppear)(UIViewController *viewController);
- @property (copy, nonatomic) void (^ viewWillDisappear)(UIViewController *viewController);
- @property (copy, nonatomic) void (^ viewDidDisappear)(UIViewController *viewController);
- /// 选择照片界面完成时的dismiss时是否需要动画效果
- /// 默认YES
- @property (assign, nonatomic) BOOL selectPhotoFinishDismissAnimated;
- /// 选择照片界面取消时的dismiss时是否需要动画效果
- /// 默认YES
- @property (assign, nonatomic) BOOL selectPhotoCancelDismissAnimated;
- /// 相机界面拍照完成时dismiss时是否需要动画效果
- /// 默认YES
- @property (assign, nonatomic) BOOL cameraFinishDismissAnimated;
- /// 相机界面取消时dismiss时是否需要动画效果
- /// 默认YES
- @property (assign, nonatomic) BOOL cameraCancelDismissAnimated;
- /// 获取PHAsset集合时的谓词条件
- /// 需要自己根据type判断是否只获取照片或视频
- /// 默认 nil
- /// if (self.selectType == HXPhotoManagerSelectedTypePhoto) {
- /// // fetchOptionsPredicate = @"mediaType == 1";
- /// options.predicate = [NSPredicate predicateWithFormat:@"mediaType == %ld", PHAssetMediaTypeImage];
- /// }else if (self.selectType == HXPhotoManagerSelectedTypeVideo) {
- /// // fetchOptionsPredicate = @"mediaType == 2";
- /// options.predicate = [NSPredicate predicateWithFormat:@"mediaType == %ld", PHAssetMediaTypeVideo];
- /// }
- @property (copy, nonatomic) NSString *fetchOptionsPredicate;
- /// 过滤PHAsset YES 过滤
- /// @param albumModel Asset所在相册模型
- @property (copy, nonatomic) BOOL (^ assetFilter)(HXAlbumModel *albumModel, PHAsset *asset);
- /// 过滤相册 YES 过滤
- @property (copy, nonatomic) BOOL (^ assetCollectionFilter)(PHAssetCollection *collection);
- /// 只使用相机功能不加载相册信息
- //@property (assign, nonatomic) BOOL onlyCamera;
- /// 保存在本地的模型
- /// 如果为空,请调用 getLocalModelsInFileWithAddData: 方法获取
- @property (copy, nonatomic) NSArray<HXPhotoModel *> *localModels;
- #pragma mark - < 保存本地的方法 >
- /// 保存本地的方法都是在主线程调用
- /// 获取保存在本地文件的模型数组
- /// @param addData 是否添加到manager的数据中
- - (NSArray<HXPhotoModel *> *)getLocalModelsInFileWithAddData:(BOOL)addData;
- /// 获取保存在本地文件的模型数组
- - (NSArray<HXPhotoModel *> *)getLocalModelsInFile;
- /// 将模型数组保存到本地文件
- - (BOOL)saveLocalModelsToFile;
- /// 将保存在本地文件的模型数组删除
- - (BOOL)deleteLocalModelsInFile;
- /// 将本地获取的模型数组添加到manager的数据中
- /// @param models 在本地获取的模型数组
- - (void)addLocalModels:(NSArray<HXPhotoModel *> *)models;
- /// 将本地获取的模型数组添加到manager的数据中
- - (void)addLocalModels;
- /// 添加自定义资源模型
- /// 如果图片/视频 选中的数量超过最大选择数时,之后选中的会变为未选中
- /// 如果设置的图片/视频不能同时选择时
- /// 图片在视频前面的话只会将图片添加到已选数组.
- /// 视频在图片前面的话只会将视频添加到已选数组.
- /// 如果 type = HXPhotoManagerSelectedTypePhoto 时 会过滤掉视频
- /// 如果 type = HXPhotoManagerSelectedTypeVideo 时 会过滤掉图片
- /// @param assetArray 模型数组
- - (void)addCustomAssetModel:(NSArray<HXCustomAssetModel *> *)assetArray;
- /// 获取已选照片数组的照片总大小
- - (void)requestPhotosBytesWithCompletion:(void (^)(NSString *totalBytes, NSUInteger totalDataLengths))completion;
- /// 获取系统所有相册
- - (void)getAllAlbumModelWithCompletion:(getAllAlbumListBlock)completion;
- /// 获取相机胶卷
- - (void)getCameraRollAlbumCompletion:(void (^)(HXAlbumModel *albumModel))completion;
- /// 据某个相册模型获取照片列表
- /// @param albumModel 相册模型
- /// @param complete 照片列表和首个选中的模型
- - (void)getPhotoListWithAlbumModel:(HXAlbumModel *)albumModel
- complete:(getPhotoListBlock)complete;
- /// 将下载完成的iCloud上的资源模型添加到数组中,确保再次获取iCloud的图片时不会出现云朵标志
- - (void)addICloudModel:(HXPhotoModel *)model;
- /// 是否可以添加当前model
- /// 返回nil则代表可以添加
- /// return 提示语
- - (NSString *)maximumOfJudgment:(HXPhotoModel *)model;
- /// 即将要选择模型时调用
- /// return nil 则走判断是否达到最大值
- /// return 任意字符串 则会提醒返回的字符串,并且禁止选择
- @property (copy, nonatomic) NSString * (^ shouldSelectModel)(HXPhotoModel *model);
- /// 已选照片数据的总大小
- @property (assign, nonatomic) NSUInteger *selectPhotoTotalDataLengths;
- @property (strong, nonatomic) NSOperationQueue *dataOperationQueue;
- #pragma mark - < 关于选择完成之前的一些方法>
- /// 完成之前选择的总数量
- - (NSInteger)selectedCount;
- /// 完成之前选择的照片数量
- - (NSInteger)selectedPhotoCount;
- /// 完成之前选择的视频数量
- - (NSInteger)selectedVideoCount;
- /// 完成之前选择的所有数组
- - (NSArray *)selectedArray;
- /// 完成之前选择的照片数组
- - (NSArray *)selectedPhotoArray;
- /// 完成之前选择的视频数组
- - (NSArray *)selectedVideoArray;
- /// 完成之前是否原图
- - (BOOL)original;
- /// 完成之前设置是否原图
- - (void)setOriginal:(BOOL)original;
- /// 完成之前的照片数组是否达到最大数
- - (BOOL)beforeSelectPhotoCountIsMaximum;
- /// 完成之前的视频数组是否达到最大数
- - (BOOL)beforeSelectVideoCountIsMaximum;
- /// 完成之前从已选数组中删除某个模型
- - (void)beforeSelectedListdeletePhotoModel:(HXPhotoModel *)model;
- /// 完成之前添加某个模型到已选数组中
- - (void)beforeSelectedListAddPhotoModel:(HXPhotoModel *)model;
- /// 完成之前添加 相机拍照/录制/本地/编辑的照片模型到cameraList里
- - (void)beforeListAddCameraPhotoModel:(HXPhotoModel *)model;
- /// 完成之前将拍摄之后的模型添加到已选数组中
- - (void)beforeListAddCameraTakePicturesModel:(HXPhotoModel *)model;
- /// 完成之前是否可以选择照片
- - (BOOL)beforeCanSelectPhoto;
- /// 完成之前是否可以选择视频
- - (BOOL)beforeCanSelectVideoWithModel:(HXPhotoModel *)model;
- #pragma mark - < 关于选择完成之后的一些方法 >
- /// 完成之后选择的总数是否达到最大
- - (BOOL)afterSelectCountIsMaximum;
- /// 完成之后选择的照片数是否达到最大
- - (BOOL)afterSelectPhotoCountIsMaximum;
- /// 完成之后选择的视频数是否达到最大
- - (BOOL)afterSelectVideoCountIsMaximum;
- /// 完成之后选择的总数
- - (NSInteger)afterSelectedCount;
- /// 完成之后选择的所有数组
- - (NSArray *)afterSelectedArray;
- /// 完成之后选择的照片数组
- - (NSArray *)afterSelectedPhotoArray;
- /// 完成之后选择的视频数组
- - (NSArray *)afterSelectedVideoArray;
- /// 设置完成之后选择的照片数组
- - (void)setAfterSelectedPhotoArray:(NSArray *)array;
- /// 设置完成之后选择的视频数组
- - (void)setAfterSelectedVideoArray:(NSArray *)array;
- /// 完成之后是否原图
- - (BOOL)afterOriginal;
- /// 交换完成之后的两个模型在已选数组里的位置
- - (void)afterSelectedArraySwapPlacesWithFromModel:(HXPhotoModel *)fromModel fromIndex:(NSInteger)fromIndex toModel:(HXPhotoModel *)toModel toIndex:(NSInteger)toIndex;
- /// 替换完成之后的模型
- - (void)afterSelectedArrayReplaceModelAtModel:(HXPhotoModel *)atModel withModel:(HXPhotoModel *)model;
- /// 完成之后添加编辑之后的模型到数组中
- - (void)afterSelectedListAddEditPhotoModel:(HXPhotoModel *)model;
- /// 完成之后将拍摄之后的模型添加到已选数组中
- - (void)afterListAddCameraTakePicturesModel:(HXPhotoModel *)model;
- /// 完成之后从已选数组中删除指定模型
- - (void)afterSelectedListdeletePhotoModel:(HXPhotoModel *)model;
- /// 完成之后添加某个模型到已选数组中
- - (void)afterSelectedListAddPhotoModel:(HXPhotoModel *)model;
- - (void)selectedListTransformAfter;
- - (void)selectedListTransformBefore;
- - (void)addTempCameraAssetModel:(HXPhotoModel *)model;
- - (void)removeAllTempCameraAssetModel;
- /**
- 取消选择
- */
- - (void)cancelBeforeSelectedList;
- /**
- 刷新已选数组里模型下标
- */
- - (void)sortSelectedListIndex;
- /**
- 清空所有已选数组
- */
- - (void)clearSelectedList;
- #pragma mark - < 辅助属性 >
- @property (assign, nonatomic) HXPhotoManagerVideoSelectedType videoSelectedType;
- @property (assign, nonatomic) BOOL selectPhotoing;
- #pragma mark - < 辅助方法 >
- - (BOOL)videoCanSelected;
- /**
- 本地资源数量
-
- @return count
- */
- - (NSInteger)cameraCount;
- /**
- 本地图片数量
-
- @return count
- */
- - (NSInteger)cameraPhotoCount;
- /**
- 本地视频数量
-
- @return count
- */
- - (NSInteger)cameraVideoCount;
- /**
- 获取本地模型数组里的第一个模型
-
- @return model
- */
- - (HXPhotoModel *)firstCameraModel;
- #pragma mark - < cell上添加photoView时所需要用到的方法 >
- - (void)changeAfterCameraArray:(NSArray *)array;
- - (void)changeAfterCameraPhotoArray:(NSArray *)array;
- - (void)changeAfterCameraVideoArray:(NSArray *)array;
- - (void)changeAfterSelectedCameraArray:(NSArray *)array;
- - (void)changeAfterSelectedCameraPhotoArray:(NSArray *)array;
- - (void)changeAfterSelectedCameraVideoArray:(NSArray *)array;
- - (void)changeAfterSelectedArray:(NSArray *)array;
- - (void)changeAfterSelectedPhotoArray:(NSArray *)array;
- - (void)changeAfterSelectedVideoArray:(NSArray *)array;
- - (void)changeICloudUploadArray:(NSArray *)array;
- - (NSArray *)afterCameraArray;
- - (NSArray *)afterCameraPhotoArray;
- - (NSArray *)afterCameraVideoArray;
- - (NSArray *)afterSelectedCameraArray;
- - (NSArray *)afterSelectedCameraPhotoArray;
- - (NSArray *)afterSelectedCameraVideoArray;
- - (NSArray *)afterICloudUploadArray;
- @end
|