最近項(xiàng)目中在做一個社交圈的功能闪朱,可以選取相冊中的圖片分享一些圖片月匣,在iOS8.0之后,用主要用photokit來對照片進(jìn)行選取奋姿,iOS官方也寫了一個官方的demophotokitAppleDemo桶错,是用collectionview來做邊查詢邊展示的,我主要介紹一下對相冊的增刪查胀蛮。
- 第一查詢最近添加相冊
// 2 206 最近添加
//獲得PHAssetCollectionTypeSmartAlbum PHAssetCollectionSubtypeSmartAlbumRecentlyAdded類型的所有相冊院刁,系統(tǒng)中的最近添加相冊只有一個,可以直接取第一個元素粪狼。
PHFetchResult<PHAssetCollection *> *assetSmartCollection=[PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumRecentlyAdded options:nil];
if (assetSmartCollection4.count>0) {
PHAssetCollection*recentlyAddedAlbum= assetSmartCollection.firstObject
NSString*albumName= recentlyAddedAlbum.localizedTitle;
//按照相片的創(chuàng)造時間查詢相冊里面的圖片
PHFetchOptions *photosOptions = [[PHFetchOptions alloc] init];
photosOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
//每一個asset對應(yīng)一個圖片
PHFetchResult<PHAsset *> *assets = [PHAsset fetchAssetsInAssetCollection:collection options:photosOptions];
//相冊中圖片的數(shù)量
NSInterger photoTotalCount= assets.count;
}
- 根據(jù)PHAsset獲取具體的圖片
// 同步獲得圖片, 只會返回1張圖片
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
//是否同步退腥,設(shè)為YES只會返回你設(shè)置圖片大小尺寸的圖片,設(shè)為NO之后再榄,會返回一張縮略圖和一張你設(shè)置尺寸的圖片
options.synchronous = YES;
options.resizeMode=PHImageRequestOptionsResizeModeFast;
options.networkAccessAllowed=YES;
// 是否要原圖
CGFloat scale = [UIScreen mainScreen].scale;
CGSize cellSize = CGSizeMake([UIScreen mainScreen].bounds.size.width/3.0, [UIScreen mainScreen].bounds.size.width/3.0);
CGSize size = CGSizeMake(cellSize.width * scale, cellSize.height/2.0 * scale);
// 從asset中獲得圖片
[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
if (result) {
_imageObject=result;
}
}];
- 增加一個名字為HelloWorld的相冊
__block PHObjectPlaceholder *albumPlaceholder;
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetCollectionChangeRequest *changeRequest = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:@"HelloWorld"];
albumPlaceholder = changeRequest.placeholderForCreatedAssetCollection;
} completionHandler:^(BOOL success, NSError *error) {
if (success) {
NSLog(@"添加相冊成功");
} completionHandler:^(BOOL success, NSError *error) {
if (!success) {
NSLog(@"Error creating asset: %@", error);
}
}];
- 向HelloWorld相冊添加一張照片
PHAssetCollection*oneAlbumColleciton;
//獲取所有的相冊信息 (在查詢相冊信息中已講)狡刘,然后遍歷,根據(jù)名字找到HelloWorld相冊
if ([oneAlbumColleciton.localizedTitle isEqualToString:@"HelloWorld"]) {
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetChangeRequest *assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:saveImage];
PHAssetCollectionChangeRequest *assetCollectionChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection: oneAlbumColleciton];
[assetCollectionChangeRequest addAssets:@[[assetChangeRequest placeholderForCreatedAsset]]];
} completionHandler:^(BOOL success, NSError *error) {
if (!success) {
DLOG(@"Error creating asset: %@", error);
}else{
}
}];
}
- 在相冊中刪除某張照片
PHFetchResult *assetResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:photosOptions];
[assetResult enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([asset isEqual:obj]) {
//刪除圖片
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
[PHAssetChangeRequest deleteAssets:@[obj]];
} completionHandler:^(BOOL success, NSError *error) {
DLOG(@"currentThread:%d",[NSThread isMainThread]);
if (success) {
else{
NSLog(@"Error: %@", error);
}
}];
}
}];