您的位置:首页 > 移动开发 > IOS开发

【iOS】拍照/相册单选、相册多选、图片浏览、图片裁剪

2017-01-04 10:44 459 查看
有一段时间没有写iOS系列的博客了。最近由于项目的需要,就有封装了一个拍照/相册单选、相册多选、图片浏览、图片裁剪的工具类。在封装这这类是站在巨人的肩膀上做的。

1.ZLPhotoBrowser:https://github.com/longitachi/ZLPhotoBrowser

2.VPImageCropper:https://github.com/windshg/VPImageCropper

上面一个是相册和相机的,下面一个是图片裁剪。

而我要做的就是把这两个封装在一起满足我们项目的需求。

常见场景

1.个人中心,修改个人头像,需要拍照或是从相册选图,这个一般是一张且带有裁剪功能。那么我的这个封装可以满足这个需求。

2.确认购物后发表评论,这是 一般是可以上传图片的,而且是可以多张,那么这个封装也可以满足需求。

两个库

关于上面提到的两个库,大家可以去库的github上面查看或是自行百度。

我的封装

我封装就是在ZLPhotoBrowser库的基础上增加了一个ZLOnePhoto类,然后把VPImageCropper给整合进去。

在ZLOnePhoto类里面只有一个方法就可以搞定上面的两个场景。

typedef NS_ENUM(NSInteger, PickerType)
{
PickerType_Camera = 0, // 拍照
PickerType_Photo, // 照片
};
typedef NS_ENUM(NSInteger, PhotoCutType)
{
PhotoCutType_YES = 0, // 裁剪
PhotoCutType_NO, // 不裁剪
};

/**
相片选择回调
@param image 相片信息
@param isCancel 是否取消  1:取消  0 没取消
*/
typedef void(^CallBackBlock)(UIImage *image, BOOL isCancel);

@interface ZLOnePhoto : NSObject
/**
单例

@return ZLOnePhoto
*/
+ (instancetype)shareInstance;

/**
拍照或是选择相册

@param pickerType PickerType
@param photoCutType 是否裁剪
@param vc 调用此方法的控制器
@param callBackBlock 回调
*/
- (void)presentPicker:(PickerType)pickerType photoCut:(PhotoCutType)photoCutType target:(UIViewController *)vc callBackBlock:(CallBackBlock)callBackBlock;


不同的需求通过设置不同的枚举值就可以了,使用起来很方便,选择结果直接在block里面回调。

例如:

// 相册单选  不裁剪
ZLOnePhoto *one = [ZLOnePhoto shareInstance];
[one presentPicker:PickerType_Photo photoCut:PhotoCutType_NO target:self callBackBlock:^(UIImage *image, BOOL isCancel) {
self.imageView.image = image;
}];


两个库怎么连接起来

两个库的连接是在
UIImagePickerControllerDelegate
的代理方法
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
里面做的。详细的处理大家可以去我的github查看代码。

iOS10权限

在info.plist中加入:

<key>NSPhotoLibraryUsageDescription</key>
<string>需要您的同意,才能访问相册</string>
<key>NSCameraUsageDescription</key>
<string>需要您的同意,才能访问相机</string>


效果图

相册单选



拍照

图片体积太大,大家去github查看。

https://github.com/zhuming3834/HGDQPhoto/blob/master/动画2.gif

相册多选



代码下载

请点击我!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: