HXWeiboPhotoPicker - 仿微博照片选择器一. 特性
1、 查看/选择GIF图片
2、 照片、视频可同时多选/原图
3、 3DTouch预览照片
4、 长按拖动改变顺序
5、 自定义相机拍照/录制视频
6、 自定义转场动画
7、 查看/选择LivePhoto IOS9以上才有用
手动导入:将项目中的“HXWeiboPhotoPicker”文件夹拖入项目中
只使用照片选择功能 导入头文件 "HXPhotoViewController.h"
选完照片/视频后自动布局功能 导入头文件 "HXPhotoView.h"
三. 要求iOS8及以上系统可使用. ARC环境.
在Xcode8环境下将项目运行在iOS10的设备/模拟器中,访问相册和相机需要配置两个info.plist文件。 Privacy - Photo Library Usage Description 和 Privacy - Camera Usage Description。
相机拍照功能请使用真机调试
四. 例子HXPhotoManager 照片管理类相关属性介绍
是否把相机功能放在外面 默认 NO 使用 HXPhotoView 时有用 outerCamera; 是否打开相机功能 openCamera; 是否开启查看GIF图片功能 - 默认开启 lookGifPhoto; 是否开启查看LivePhoto功能呢 - 默认开启 lookLivePhoto; 是否一开始就进入相机界面 goCamera; 最大选择数 默认10 - 必填 maxNum; 图片最大选择数 默认9 - 必填 photoMaxNum; 视频最大选择数 默认1 - 必填 videoMaxNum; 图片和视频是否能够同时选择 默认支持 selectTogether; 相册列表每行多少个照片 默认4个 rowCount;Demo1
// 懒加载 照片管理类 - (HXPhotoManager *)manager { if (!_manager) { _manager = [[HXPhotoManager alloc] initWithType:HXPhotoManagerSelectedTypePhotoAndVideo]; } return _manager; } // 照片选择控制器 HXPhotoViewController *vc = [[HXPhotoViewController alloc] init]; vc.delegate = self; vc.manager = self.manager; [self presentViewController:[[UINavigationController alloc] initWithRootViewController:vc] animated:YES completion:nil]; // 通过 HXPhotoViewControllerDelegate 代理返回选择的图片以及视频 - (void)photoViewControllerDidNext:(NSArray *)allList Photos:(NSArray *)photos Videos:(NSArray *)videos Original:(BOOL)original // 点击取消 - (void)photoViewControllerDidCancelDemo2
// 懒加载 照片管理类 - (HXPhotoManager *)manager { if (!_manager) { _manager = [[HXPhotoManager alloc] initWithType:HXPhotoManagerSelectedTypePhotoAndVideo]; } return _manager; } self.navigationController.navigationBar.translucent = NO; self.automaticallyAdjustsScrollViewInsets = YES; HXPhotoView *photoView = [[HXPhotoView alloc] initWithFrame:CGRectMake((414 - 375) / 2, 100, 375, 400) WithManager:self.manager]; photoView.delegate = self; photoView.backgroundColor = [UIColor whiteColor]; [self.view addSubview:photoView]; // 通过 HXPhotoViewDelegate 代理返回 选择、移动顺序、删除之后的图片以及视频 - (void)photoViewChangeComplete:(NSArray *)allList Photos:(NSArray *)photos Videos:(NSArray *)videos Original:(BOOL)isOriginal // 当 HXPhotoView 更新frame改变大小时 - (void)photoViewUpdateFrame:(CGRect)frame WithView:(UIView *)view关于通过 HXPhotoModel 获取照片/视频信息的使用介绍 具体代码还是请下载Demo
// 获取照片资源 [photos enumerateObjectsUsingBlock:^(HXPhotoModel *model, NSUInteger idx, BOOL * _Nonnull stop) { // 小图 - 这个字段会一直有值 model.thumbPhoto; // 大图 - 这个字段有可能没有值, 只有当查看过大图之后才会有值 - 如果是通过相机拍照的这个字段一直有值跟 thumbPhoto 是一样的 model.previewPhoto; // imageData - 这个字段有可能没有值, 只有当查看过gif图片之后才会有值 - 通过相机拍照的这个字段没有值 model.imageData; // livePhoto - 这个字段只有当查看过livePhoto之后才会有值 model.livePhoto; // isCloseLivePhoto 判断当前图片是否关闭了 livePhoto 功能 YES-关闭 NO-开启 model.isCloseLivePhoto; // 获取imageData - 通过相册获取时有用 [HXPhotoTools FetchPhotoDataForPHAsset:model.asset completion:^(NSData *imageData, NSDictionary *info) { NSLog(@'%@',imageData); }]; // 获取image - PHImageManagerMaximumSize 是原图尺寸 - 通过相册获取时有用 CGSize size = PHImageManagerMaximumSize; // 通过传入 size 的大小来控制图片的质量 [HXPhotoTools FetchPhotoForPHAsset:model.asset Size:size resizeMode:PHImageRequestOptionsResizeModeFast completion:^(UIImage *image, NSDictionary *info) { NSLog(@'%@',image); }]; // 如果是通过相机拍摄的照片只有 thumbPhoto、previewPhoto和imageSize 这三个字段有用可以通过 type 这个字段判断是不是通过相机拍摄的 if (model.type == HXPhotoModelMediaTypeCameraPhoto); }]; // 如果是相册选取的视频 要获取视频URL 必须先将视频压缩写入文件,得到的文件路径就是视频的URL 如果是通过相机录制的视频那么 videoURL 这个字段就是视频的URL 可以看需求看要不要压缩 [videos enumerateObjectsUsingBlock:^(HXPhotoModel *model, NSUInteger idx, BOOL * _Nonnull stop) { // 视频封面 model.thumbPhoto; // previewPhoto 这个也是视频封面 如果是在相册选择的视频 这个字段有可能没有值,只有当会员通过3DTouch 预览过之后才会有值 而且比 thumbPhoto 清晰 如果视频是通过相机拍摄的视频 那么 previewPhoto 这个字段跟 thumbPhoto 是同一张图片也是比较清晰的 model.previewPhoto; // 如果是通过相机录制的视频 需要通过 model.VideoURL 这个字段来压缩写入文件 if (model.type == HXPhotoModelMediaTypeCameraVideo) { [self compressedVideoWithURL:model.videoURL success:^(NSString *fileName) { NSLog(@'%@',fileName); // 视频路径也是视频URL; } failure:^{ // 压缩写入失败 }]; }else { // 如果是在相册里面选择的视频就需要用过 model.avAsset 这个字段来压缩写入文件 [self compressedVideoWithURL:model.avAsset success:^(NSString *fileName) { NSLog(@'%@',fileName); // 视频路径也是视频URL; } failure:^{ // 压缩写入失败 }]; } }]; // 判断照片、视频 或 是否是通过相机拍摄的 [allList enumerateObjectsUsingBlock:^(HXPhotoModel *model, NSUInteger idx, BOOL * _Nonnull stop) { if (model.type == HXPhotoModelMediaTypeCameraPhoto) { // 通过相机录制的视频 }else if (model.type == HXPhotoModelMediaTypeCameraPhoto) { // 通过相机拍摄的照片 }else if (model.type == HXPhotoModelMediaTypePhoto) { // 相册里的照片 }else if (model.type == HXPhotoModelMediaTypePhotoGif) { // 相册里的GIF图 }else if (model.type == HXPhotoModelMediaTypeLivePhoto) { // 相册里的livePhoto } }];github地址:https://github.com/LoveZYForever/HXWeiboPhotoPicker