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

有一段时间没有写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 *)info里面做的。详细的处理大家可以去我的github查看代码。

iOS10权限

在info.plist中加入:

<key>NSPhotoLibraryUsageDescriptionkey>
<string>需要您的同意,才能访问相册string>
<key>NSCameraUsageDescriptionkey>
<string>需要您的同意,才能访问相机string>

效果图

相册单选

拍照
图片体积太大,大家去github查看。
https://github.com/zhuming3834/HGDQPhoto/blob/master/动画2.gif
相册多选

代码下载

请点击我!

你可能感兴趣的:(【iOS】拍照/相册单选、相册多选、图片浏览、图片裁剪)