HXPhotoPickeriOS 图片/视频选择器

联合创作 · 2023-09-26 07:52

HXPhotoPicker 是一个 IOS 图片/视频选择器 - 支持 LivePhoto、GIF 图片选择、3DTouch 预览、在线下载 iCloud 上的资源、编辑图片/视频、浏览网络图片等功能

   

    

   

特性 - Features

  •  查看、选择GIF图片
  •  照片、视频可同时多选/原图
  •  3DTouch预览照片
  •  长按拖动改变顺序
  •  自定义相机拍照、录制视频
  •  自定义转场动画
  •  查看、选择LivePhoto iOS9.1以上才有用
  •  浏览网络图片、网络视频
  •  仿微信编辑图片功能
  •  自定义裁剪视频时长
  •  传入本地图片、视频
  •  在线下载iCloud上的资源
  •  两种相册展现方式(列表、弹窗)
  •  支持Cell上添加
  •  支持草稿功能
  •  同一界面多个不同选择器
  •  支持暗黑模式
  •  支持横向布局
  •  支持Xib和Masonry布局
  •  支持自定义item的大小
  •  支持滑动手势选择

要求 - Requirements

  • iOS8及以上系统可使用. ARC环境. - iOS 8 or later. Requires ARC
  • 访问相册和相机需要配置四个info.plist文件
  • Privacy - Photo Library Usage Description 和 Privacy - Camera Usage Description 以及 Privacy - Microphone Usage Description
  • Privacy - Location When In Use Usage Description 使用相机拍照时会获取位置信息
  • 相机拍照功能请使用真机调试

应用示例 - Examples

跳转相册选择照片

 

// 懒加载 照片管理类
- (HXPhotoManager *)manager {
    if (!_manager) {
        _manager = [[HXPhotoManager alloc] initWithType:HXPhotoManagerSelectedTypePhotoAndVideo];
    }
    return _manager;
}

// 方法一:
HXWeakSelf
[self hx_presentSelectPhotoControllerWithManager:self.manager didDone:^(NSArray<HXPhotoModel *> *allList, NSArray<HXPhotoModel *> *photoList, NSArray<HXPhotoModel *> *videoList, BOOL isOriginal, UIViewController *viewController, HXPhotoManager *manager) {
    weakSelf.total.text = [NSString stringWithFormat:@"总数量:%ld   ( 照片:%ld   视频:%ld )",allList.count, photoList.count, videoList.count];
    weakSelf.original.text = isOriginal ? @"YES" : @"NO";
    NSSLog(@"block - all - %@",allList);
    NSSLog(@"block - photo - %@",photoList);
    NSSLog(@"block - video - %@",videoList);
} cancel:^(UIViewController *viewController, HXPhotoManager *manager) {
    NSSLog(@"block - 取消了");
}];

// 方法二:
// 照片选择控制器 
HXCustomNavigationController *nav = [[HXCustomNavigationController alloc] initWithManager:self.manager delegate:self];
[self presentViewController:nav animated:YES completion:nil];

// 通过 HXCustomNavigationControllerDelegate 代理返回选择的图片以及视频
/**
点击完成按钮

@param photoNavigationViewController self
@param allList 已选的所有列表(包含照片、视频)
@param photoList 已选的照片列表
@param videoList 已选的视频列表
@param original 是否原图
*/
- (void)photoNavigationViewController:(HXCustomNavigationController *)photoNavigationViewController didDoneAllList:(NSArray<HXPhotoModel *> *)allList photos:(NSArray<HXPhotoModel *> *)photoList videos:(NSArray<HXPhotoModel *> *)videoList original:(BOOL)original;

/**
点击取消

@param photoNavigationViewController self
*/
- (void)photoNavigationViewControllerDidCancel:(HXCustomNavigationController *)photoNavigationViewController;

单独选择照片/适配编辑功能

// 单独使用照片编辑功能
HXPhotoModel *photoModel = [HXPhotoModel photoModelWithImage:[UIImage imageNamed:@"1"]];
[self hx_presentPhotoEditViewControllerWithManager:self.manager photoModel:photoModel delegate:nil done:^(HXPhotoModel *beforeModel,
    HXPhotoModel *afterModel, HXPhotoEditViewController *viewController) {
    // beforeModel编辑之前、afterModel编辑之后
    weakSelf.imageView.image = afterModel.thumbPhoto;
} cancel:^(HXPhotoEditViewController *viewController) {
    // 取消
}];

// 单独使用仿微信编辑功能
[self hx_presentWxPhotoEditViewControllerWithConfiguration:self.manager.configuration.photoEditConfigur photoModel:photoModel delegate:nil finish:^(HXPhotoEdit * _Nonnull photoEdit, HXPhotoModel * _Nonnull photoModel, HX_PhotoEditViewController * _Nonnull viewController) {
    if (photoEdit) {
        // 有编辑过
        weakSelf.imageView.image = photoEdit.editPreviewImage;
    }else {
        // 为空则未进行编辑
        weakSelf.imageView.image = photoModel.thumbPhoto;
    }
    // 记录下当前编辑的记录,再次编辑可在上一次基础上进行编辑
    weakSelf.photoEdit = photoEdit;
} cancel:^(HX_PhotoEditViewController * _Nonnull viewController) {
    // 取消
}];

// 单独使用视频编辑功能
NSURL *url = [[NSBundle mainBundle] URLForResource:@"QQ空间视频_20180301091047" withExtension:@"mp4"];
HXPhotoModel *videoModel = [HXPhotoModel photoModelWithVideoURL:url];
[self hx_presentVideoEditViewControllerWithManager:self.manager videoModel:videoModel delegate:nil done:^(HXPhotoModel *beforeModel,
    HXPhotoModel *afterModel, HXVideoEditViewController *viewController) {
    // beforeModel编辑之前、afterModel编辑之后
    weakSelf.imageView.image = afterModel.thumbPhoto;
} cancel:^(HXVideoEditViewController *viewController) {
    // 取消
}];
浏览 5
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报