ZZPhotoDatas.m
6.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
//
// ZZPhotoDatas.m
// ZZFramework
//
// Created by Yuan on 15/12/17.
// Copyright © 2015年 zzl. All rights reserved.
//
#import "ZZPhotoDatas.h"
#import "ZZPhotoListModel.h"
#import "ZZPhoto.h"
@implementation ZZPhotoDatas
-(NSMutableArray *)GetPhotoListDatas
{
NSMutableArray *dataArray = [NSMutableArray array];
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc]init];
PHFetchResult *smartAlbumsFetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:fetchOptions];
//遍历相机胶卷
[smartAlbumsFetchResult enumerateObjectsUsingBlock:^(PHAssetCollection * _Nonnull collection, NSUInteger idx, BOOL *stop) {
if (![collection.localizedTitle isEqualToString:@"Videos"]) {
NSArray<PHAsset *> *assets = [self GetAssetsInAssetCollection:collection];
ZZPhotoListModel *listModel = [[ZZPhotoListModel alloc]init];
listModel.count = assets.count;
listModel.title = [self FormatPhotoAlumTitle:collection.localizedTitle];
listModel.lastObject = assets.lastObject;
listModel.assetCollection = collection;
[dataArray addObject:listModel];
}
}];
//遍历自定义相册
PHFetchResult *smartAlbumsFetchResult1 = [PHAssetCollection fetchTopLevelUserCollectionsWithOptions:fetchOptions];
[smartAlbumsFetchResult1 enumerateObjectsUsingBlock:^(PHAssetCollection * _Nonnull collection, NSUInteger idx, BOOL *stop) {
NSArray<PHAsset *> *assets = [self GetAssetsInAssetCollection:collection];
ZZPhotoListModel *listModel = [[ZZPhotoListModel alloc]init];
listModel.count = assets.count;
listModel.title = collection.localizedTitle;
listModel.lastObject = assets.lastObject;
listModel.assetCollection = collection;
[dataArray addObject:listModel];
}];
return dataArray;
}
-(NSString *) FormatPhotoAlumTitle:(NSString *)title
{
if ([title isEqualToString:@"All Photos"] || [title isEqualToString:@"Camera Roll"]) {
return @"相机胶卷";
}
return nil;
}
- (NSArray *)GetAssetsInAssetCollection:(PHAssetCollection *)assetCollection
{
NSMutableArray<PHAsset *> *arr = [NSMutableArray array];
PHFetchResult *result = [self GetFetchResult:assetCollection];
[result enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (((PHAsset *)obj).mediaType == PHAssetMediaTypeImage) {
[arr addObject:obj];
}
}];
return arr;
}
-(PHFetchResult *)GetFetchResult:(PHAssetCollection *)assetCollection
{
PHFetchResult *fetchResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:nil];
return fetchResult;
}
-(NSMutableArray *)GetPhotoAssets:(PHFetchResult *)fetchResult
{
NSMutableArray *dataArray = [NSMutableArray array];
for (PHAsset *asset in fetchResult) {
//只添加图片类型资源,过滤除视频类型资源
if (asset.mediaType == PHAssetMediaTypeImage) {
ZZPhoto *photo = [[ZZPhoto alloc]init];
photo.asset = asset;
[dataArray addObject:photo];
}
}
return dataArray;
}
-(PHFetchResult *)GetCameraRollFetchResul
{
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc]init];
PHFetchResult *smartAlbumsFetchResult = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:fetchOptions];
PHFetchResult *fetch = [PHAsset fetchAssetsInAssetCollection:[smartAlbumsFetchResult objectAtIndex:0] options:nil];
return fetch;
}
-(void) GetImageObject:(id)asset complection:(void (^)(UIImage *,NSURL *))complection
{
if ([asset isKindOfClass:[PHAsset class]]) {
PHAsset *phAsset = (PHAsset *)asset;
CGFloat photoWidth = [UIScreen mainScreen].bounds.size.width;
CGFloat aspectRatio = phAsset.pixelWidth / (CGFloat)phAsset.pixelHeight;
CGFloat multiple = [UIScreen mainScreen].scale;
CGFloat pixelWidth = photoWidth * multiple;
CGFloat pixelHeight = pixelWidth / aspectRatio;
[[PHImageManager defaultManager] requestImageForAsset:phAsset targetSize:CGSizeMake(pixelWidth, pixelHeight) contentMode:PHImageContentModeAspectFit options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
BOOL downloadFinined = ![[info objectForKey:PHImageCancelledKey] boolValue] && ![info objectForKey:PHImageErrorKey] && ![[info objectForKey:PHImageResultIsDegradedKey] boolValue];
//设置BOOL判断,确定返回高清照片
if (downloadFinined) {
NSURL *imageUrl = (NSURL *)[info objectForKey:@"PHImageFileURLKey"];
complection(result,imageUrl);
}
}];
}
}
-(void)GetImageObject:(id)assets complections:(void (^)(UIImage *, BOOL isDegraded))complection
{
if ([assets isKindOfClass:[PHAsset class]]) {
PHAsset *phAsset = (PHAsset *)assets;
CGFloat photoWidth = [UIScreen mainScreen].bounds.size.width;
CGFloat aspectRatio = phAsset.pixelWidth / (CGFloat)phAsset.pixelHeight;
CGFloat multiple = [UIScreen mainScreen].scale;
CGFloat pixelWidth = photoWidth * multiple;
CGFloat pixelHeight = pixelWidth / aspectRatio;
[[PHImageManager defaultManager] requestImageForAsset:phAsset targetSize:CGSizeMake(pixelWidth, pixelHeight) contentMode:PHImageContentModeAspectFit options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
BOOL downloadFinined = (![[info objectForKey:PHImageCancelledKey] boolValue] && ![info objectForKey:PHImageErrorKey]);
if (downloadFinined) {
if (complection) complection(result,[[info objectForKey:PHImageResultIsDegradedKey] boolValue]);
}
}];
}
}
@end