本开源库基于iOS8中PhotoKit框架制作,所以暂不支持iOS8以下版本,请谅解。另,在iOS10中,使用photoKit框架的应用可能会出现crash,但这个问题相信很快会被官方修复,请无需担心。
效果图
实际截图
以下是原Idea作者的Dribble:Photo Picker Interaction 地址和本人的GitHub:CBImagePicker地址,希望大家点击支持,再次感谢。
下面我们来仔细的分析,做这个库的完整过程。
第一部分 Category
整个库的制作用到了大量的坐标计算,所以我们很有必要写一个category来简化这一部分操作,我针对UIView的UIView+CBAddition类库和针对UIImage的UIImage+CBAddition都是为了简化这一部分内容而做的工作。
1 2 3 4 |
// Getter - (CGFloat)originLeft { return self.frame.origin.x; } |
1 2 3 4 5 6 |
// Setter - (void)setOriginLeft:(CGFloat)originLeft { if (!isnan(originLeft)) { self.frame = CGRectMake(originLeft, self.originUp, self.sizeWidth, self.sizeHeight); } } |
大都以设置属性后自定义Getter和Setter的方式来进行,更详细代码请点击查看。
第二部分 ImagePicker(图片选择)
这个部分我们分小节来讲。
TitleView
TitleView分为两个View,第一个是Label,第二个则是UIImageView,这里使用了苹果原生NSLayoutConstraint来添加约束去限制两个View之间的位置和尺寸的关系,使用方法如下:
1 |
+(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c; |
参数说明:
view1:设置的目标视图 attr1:设置的目标视图的属性 relation:目的视图和参照视图之间的关系view2:设置的参照视图 attr2:参照视图的参照属性 multiplier:目标视图属性和参照视图属性倍值 c:目标视图属性和参照视图属性差异值
CollctionView
相册获取
collection这个部分,主要是图片数据的申请,这里首先使用了PhotoKit来申请所有的相册列表,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; PHFetchResult *topLevelUserCollections = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil]; [smartAlbums enumerateObjectsUsingBlock:^(PHAssetCollection * _Nonnull collection, NSUInteger idx, BOOL *stop) { PHFetchResult *fetchResult = [PHAsset fetchAssetsInAssetCollection:collection options:nil]; if (fetchResult.count > 0) { [self.assetsGroupArray addObject:collection]; } }]; [topLevelUserCollections enumerateObjectsUsingBlock:^(PHAssetCollection * _Nonnull collection, NSUInteger idx, BOOL *stop) { PHFetchResult *fetchResult = [PHAsset fetchAssetsInAssetCollection:collection options:nil]; if (fetchResult.count > 0) { [self.assetsGroupArray addObject:collection]; } }]; |
这里使用了一个数组存储所取到的所有相册列表,相册信息存储对象为PHAssetCollection。
相册图片获取
而当我们取到相册信息之后,要从对应相册中取到我们所需要显示的图片,那么这里我们根据index从上面的数组中取出我们所需要的对应相册,遍历改相册,再利用方法requestImageForAsset来请求图片信息,方法如下:
1 |
- (PHImageRequestID)requestImageForAsset:(PHAsset *)asset targetSize:(CGSize)targetSize contentMode:(PHImageContentMode)contentMode options:(nullable PHImageRequestOptions *)options resultHandler:(void (^)n-t">PHImageRequestOptions *)options resultHandler:(void (^)܀担心。
以下是原Idea作者的Dribble:Photo Picker Interaction 地址和本人的GitHub:CBImagePicker地址,希望大家点击支持,再次感谢。
第一部分 Category整个库的制作用到了大量的坐标计算,所以我们很有必要写一个category来简化这一部分操作,我针对UIView的UIView+CBAddition类库和针对UIImage的UIImage+CBAddition都是为了简化这一部分内容而做的工作。
大都以设置属性后自定义Getter和Setter的方式来进行,更详细代码请点击查看。 第二部分 ImagePicker(图片选择)这个部分我们分小节来讲。 TitleViewTitleView分为两个View,第一个是Label,第二个则是UIImageView,这里使用了苹果原生NSLayoutConstraint来添加约束去限制两个View之间的位置和尺寸的关系,使用方法如下:
参数说明:
CollctionView相册获取collection这个部分,主要是图片数据的申请,这里首先使用了PhotoKit来申请所有的相册列表,代码如下:
这里使用了一个数组存储所取到的所有相册列表,相册信息存储对象为PHAssetCollection。 相册图片获取而当我们取到相册信息之后,要从对应相册中取到我们所需要显示的图片,那么这里我们根据index从上面的数组中取出我们所需要的对应相册,遍历改相册,再利用方法requestImageForAsset来请求图片信息,方法如下:
|