jiGuangXieZuo/ProductApp/Pods/HXPhotoPicker/HXPhotoPicker/HXPhotoManager.h

315 lines
11 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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