登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

仿微博照片选择器 - 支持LivePhoto、GIF图片选择、3DTouch预览 ...

[复制链接]
来自: 秋天的枫叶丶 分类: iOS精品源码 上传时间: 2017-3-14 13:59:52
Tag:图片 照片 微博 图片处理 界面布局

项目介绍:

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)photoViewControllerDidCancel  
  • Demo2

// 懒加载 照片管理类  
- (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

code4app

相关源码推荐:

    我来说两句
    *滑动验证:
    所有评论(286)
    phoiu 2017-3-15 17:31:49
    code4app好的代码demo真的很多,谢谢啦~
    回复
    littleRed 2017-3-15 17:32:05
    code4app确实是个好地方,必须支持~
    回复
    AlonMessi 2017-3-15 17:32:34
    好好 学习了 确实不错
    回复
    BlueManlove 2017-3-15 17:33:01
    膜拜大神~
    回复
    hellokenken 2017-3-15 17:33:43
    好好 学习了 确实不错
    回复
    kengsir 2017-3-15 17:34:52
    mark,收藏了
    回复
    我唔系启亮 2017-3-15 18:02:13
    精华内容,楼主V5!
    回复
    code4app热心网友 2017-3-16 09:32:01
    淡定,淡定,淡定……
    回复
    code4app热心网友 2017-3-16 11:43:49
    精华内容,楼主V5!
    回复
    提取码:  下载次数:238 状态:已购或VIP 售价:0(原价:10)金钱 下载权限:初级码农 
    4152 0 238
    相关代码
      联系我们
      首页/微信公众账号投稿

      帖子代码编辑/版权问题

      QQ:435399051,742864542

      如何获得代码达人称号?

      代码贡献英雄榜
      用户名 下载数
      代码分类
      通过邮件订阅最新 Code4App 信息
      上一条 /4 下一条
      联系我们
      关闭
      合作电话:
      13802416937
      Email:
      435399051@qq.com
      商务市场合作/投稿
      问题反馈及帮助
      联系我们

      广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

      快速回复 返回顶部 返回列表