HXPhotoViewProtocol.h 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. //
  2. // HXPhotoViewProtocol.h
  3. // HXPhotoPickerExample
  4. //
  5. // Created by Silence on 2020/8/1.
  6. // Copyright © 2020 Silence. All rights reserved.
  7. //
  8. #import <UIKit/UIKit.h>
  9. NS_ASSUME_NONNULL_BEGIN
  10. @class HXPhotoView, HXPhotoModel, HXPhotoSubViewCell;
  11. /**
  12. 照片/视频发生改变时调用 - 选择、移动顺序、删除
  13. @param allList 所有类型的模型数组
  14. @param photos 照片类型的模型数组
  15. @param videos 视频类型的模型数组
  16. @param isOriginal 是否原图
  17. */
  18. typedef void (^HXPhotoViewChangeCompleteBlock)(NSArray<HXPhotoModel *> *allList, NSArray<HXPhotoModel *> *photos, NSArray<HXPhotoModel *> *videos, BOOL isOriginal);
  19. /**
  20. 点击了添加cell的事件
  21. */
  22. typedef void (^HXPhotoViewDidAddCellBlock)(HXPhotoView *myPhotoView);
  23. /**
  24. 当view高度改变时调用
  25. @param frame 位置大小
  26. */
  27. typedef void (^HXPhotoViewUpdateFrameBlock)(CGRect frame);
  28. /**
  29. 点击取消时调用
  30. */
  31. typedef void (^HXPhotoViewDidCancelBlock)(void);
  32. /**
  33. 删除网络图片时调用
  34. @param networkPhotoUrl 被删除的图片地址
  35. */
  36. typedef void (^HXPhotoViewDeleteNetworkPhotoBlock)(NSString *networkPhotoUrl);
  37. /**
  38. 当前删除的模型
  39. @param model 模型
  40. @param index 下标
  41. */
  42. typedef void (^HXPhotoViewCurrentDeleteModelBlock)(HXPhotoModel *model, NSInteger index);
  43. /**
  44. 长按手势结束时是否删除当前拖动的cell
  45. @param longPgr 长按手势识别器
  46. @param indexPath 当前拖动的cell
  47. @return 是否删除
  48. */
  49. typedef BOOL (^HXPhotoViewShouldDeleteCurrentMoveItemBlock)(UILongPressGestureRecognizer *longPgr, NSIndexPath *indexPath);
  50. /**
  51. 长按手势发生改变时调用
  52. @param longPgr 长按手势识别器
  53. @param indexPath 当前拖动的cell
  54. */
  55. typedef void (^HXPhotoViewLongGestureRecognizerChangeBlock)(UILongPressGestureRecognizer *longPgr, NSIndexPath *indexPath);
  56. /**
  57. 长按手势开始时调用
  58. @param longPgr 长按手势识别器
  59. @param indexPath 当前拖动的cell
  60. */
  61. typedef void (^HXPhotoViewLongGestureRecognizerBeganBlock)(UILongPressGestureRecognizer *longPgr, NSIndexPath *indexPath);
  62. /**
  63. 长按手势结束时调用
  64. @param longPgr 长按手势识别器
  65. @param indexPath 当前拖动的cell
  66. */
  67. typedef void (^HXPhotoViewLongGestureRecognizerEndedBlock)(UILongPressGestureRecognizer *longPgr, NSIndexPath *indexPath);
  68. @protocol HXPhotoViewDelegate <NSObject>
  69. @optional
  70. /// 照片/视频发生改变、HXPohotView初始化、manager赋值时调用 - 选择、移动顺序、删除、刷新视图
  71. /// 调用 refreshView 会触发此代理
  72. /// @param allList 所有类型的模型数组
  73. /// @param photos 照片类型的模型数组
  74. /// @param videos 视频类型的模型数组
  75. /// @param isOriginal 是否选择了原图
  76. - (void)photoView:(HXPhotoView *)photoView
  77. changeComplete:(NSArray<HXPhotoModel *> *)allList
  78. photos:(NSArray<HXPhotoModel *> *)photos
  79. videos:(NSArray<HXPhotoModel *> *)videos
  80. original:(BOOL)isOriginal;
  81. /// 照片/视频发生改变、HXPohotView初始化、manager赋值时调用 - 选择、移动顺序、删除、刷新视图
  82. /// 调用 refreshView 会触发此代理
  83. - (void)photoViewChangeComplete:(HXPhotoView *)photoView
  84. allAssetList:(NSArray<PHAsset *> *)allAssetList
  85. photoAssets:(NSArray<PHAsset *> *)photoAssets
  86. videoAssets:(NSArray<PHAsset *> *)videoAssets
  87. original:(BOOL)isOriginal;
  88. /// 相册相片列表点击了完成按钮/删除/移动、HXPohotView初始化且有数据、manager赋值且有数据时
  89. /// 调用 refreshView 不会触发此代理
  90. - (void)photoListViewControllerDidDone:(HXPhotoView *)photoView
  91. allList:(NSArray<HXPhotoModel *> *)allList
  92. photos:(NSArray<HXPhotoModel *> *)photos
  93. videos:(NSArray<HXPhotoModel *> *)videos
  94. original:(BOOL)isOriginal;
  95. /// 点击了添加按钮的事件
  96. - (void)photoViewDidAddCellClick:(HXPhotoView *)photoView;
  97. /// 当view高度改变时调用
  98. /// @param frame 位置大小
  99. - (void)photoView:(HXPhotoView *)photoView updateFrame:(CGRect)frame;
  100. /// 取消选择图片时调用
  101. - (void)photoViewDidCancel:(HXPhotoView *)photoView;
  102. /// 删除网络图片时调用
  103. /// @param networkPhotoUrl 被删除的图片地址
  104. - (void)photoView:(HXPhotoView *)photoView deleteNetworkPhoto:(NSString *)networkPhotoUrl;
  105. /// 当前删除的模型
  106. - (void)photoView:(HXPhotoView *)photoView currentDeleteModel:(HXPhotoModel *)model currentIndex:(NSInteger)index;
  107. /// 长按手势结束时是否删除当前拖动的cell
  108. - (BOOL)photoViewShouldDeleteCurrentMoveItem:(HXPhotoView *)photoView
  109. gestureRecognizer:(UILongPressGestureRecognizer *)longPgr
  110. indexPath:(NSIndexPath *)indexPath;
  111. /// 长按手势发生改变时调用
  112. - (void)photoView:(HXPhotoView *)photoView gestureRecognizerChange:(UILongPressGestureRecognizer *)longPgr indexPath:(NSIndexPath *)indexPath;
  113. /// 长按手势开始时调用
  114. - (void)photoView:(HXPhotoView *)photoView gestureRecognizerBegan:(UILongPressGestureRecognizer *)longPgr indexPath:(NSIndexPath *)indexPath;
  115. /// 长按手势结束时调用
  116. - (void)photoView:(HXPhotoView *)photoView gestureRecognizerEnded:(UILongPressGestureRecognizer *)longPgr indexPath:(NSIndexPath *)indexPath;
  117. /// collectionView是否可以选择当前这个item(不包括添加按钮)
  118. - (BOOL)photoView:(HXPhotoView *)photoView collectionViewShouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
  119. model:(HXPhotoModel *)model;
  120. /// 当前选择的model数组,不是已经选择的model数组
  121. /// 例: 已经选择了 照片1、视频1,再跳转相册选择了照片2、视频2,那么一共就是 照片1、视频1、照片2、视频2.那这个代理返回的数据就是 照片2、视频2
  122. /// 只有在相册列表点了确定按钮才会触发
  123. - (void)photoViewCurrentSelected:(NSArray<HXPhotoModel *> *)allList
  124. photos:(NSArray<HXPhotoModel *> *)photos
  125. videos:(NSArray<HXPhotoModel *> *)videos
  126. original:(BOOL)isOriginal;
  127. /// 取消预览大图的回调
  128. - (void)photoViewPreviewDismiss:(HXPhotoView *)photoView;
  129. /// 实现这个代理返回的高度就是HXPhotoView的高度,不会进行自动计算高度.
  130. /// 每次需要更新高度的时候触发,请确保高度正确
  131. - (CGFloat)photoViewHeight:(HXPhotoView *)photoView;
  132. /// 自定义每个item的大小,实现此代码必须将 HXPhotoViewCustomItemSize 此宏的值修改为 1
  133. /// 如果为pod导入的话,请使用 pod 'HXPhotoPicker/CustomItem'
  134. /// 并且必须实现 - (CGFloat)photoViewHeight:(HXPhotoView *)photoView 此代理返回HXPhotoView的高度,如果不实现则HXPhotoView的高度为0
  135. /// @param isAddItem 是否是添加按钮的item
  136. - (CGSize)collectionView:(UICollectionView *)collectionView
  137. layout:(UICollectionViewLayout *)collectionViewLayout
  138. sizeForItemAtIndexPath:(NSIndexPath *)indexPath
  139. isAddItem:(BOOL)isAddItem
  140. photoView:(HXPhotoView *)photoView;
  141. - (CGFloat)collectionView:(UICollectionView *)collectionView
  142. layout:(UICollectionViewLayout *)collectionViewLayout
  143. minimumLineSpacingForSectionAtIndex:(NSInteger)section
  144. photoView:(HXPhotoView *)photoView;
  145. - (CGFloat)collectionView:(UICollectionView *)collectionView
  146. layout:(UICollectionViewLayout *)collectionViewLayout
  147. minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
  148. photoView:(HXPhotoView *)photoView;
  149. /// 相机拍照完成
  150. - (void)photoViewCameraTakePictureCompletion:(HXPhotoView *)photoView
  151. model:(HXPhotoModel *)model;
  152. @end
  153. NS_ASSUME_NONNULL_END