iOS實(shí)現(xiàn)圖片保存與搜索功能
本文實(shí)現(xiàn)Photos.framework的常見功能,包括:創(chuàng)建自定義相冊、保存圖片到自定義相冊、搜索所有相冊的圖片,具體內(nèi)容如下
1、保存圖片到相冊
/**
* 保存圖片到相冊
*/
- (IBAction)saveImage {
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
if (status == PHAuthorizationStatusDenied) {
NSLog(@"請到【設(shè)置-隱私-照片】打開訪問開關(guān)");
} else if (status == PHAuthorizationStatusRestricted) {
NSLog(@"無法訪問相冊");
} else {
// 保存相片的標(biāo)識(shí)
__block NSString *assetId = nil;
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
// 保存相片到相機(jī)膠卷,并返回標(biāo)識(shí)
assetId = [PHAssetCreationRequest creationRequestForAssetFromImage:[UIImage imageNamed:@"logo"]].placeholderForCreatedAsset.localIdentifier;
} completionHandler:^(BOOL success, NSError * _Nullable error) {
if (!success) {
NSLog(@"保存失?。?@", error);
return;
}
// 根據(jù)標(biāo)識(shí)獲得相片對象
PHAsset *asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetId] options:nil].lastObject;
// 拿到自定義的相冊對象
PHAssetCollection *collection = [self collection];
if (collection == nil) return;
// 保存相片到自定義相冊中
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
[[PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection] addAssets:@[asset]];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
if (success) {
NSLog(@"保存成功");
} else {
NSLog(@"保存失?。?@", error);
}
}];
}];
}
}
2、搜索所有相片
/**
* 查詢所有的圖片
*/
- (IBAction)searchAllImages {
// 遍歷所有的自定義相冊
PHFetchResult<PHAssetCollection *> *collectionResult0 = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
for (PHAssetCollection *collection in collectionResult0) {
[self searchAllImagesInCollection:collection];
}
// 獲得相機(jī)膠卷的圖片
PHFetchResult<PHAssetCollection *> *collectionResult1 = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
for (PHAssetCollection *collection in collectionResult1) {
if (![collection.localizedTitle isEqualToString:@"Camera Roll"]) continue;
[self searchAllImagesInCollection:collection];
break;
}
}
/**
* 查詢某個(gè)相冊里面的所有圖片
*/
- (void)searchAllImagesInCollection:(PHAssetCollection *)collection
{
// 采取同步獲取圖片(只獲得一次圖片)
PHImageRequestOptions *imageOptions = [[PHImageRequestOptions alloc] init];
imageOptions.synchronous = YES;
NSLog(@"相冊名字:%@", collection.localizedTitle);
// 遍歷這個(gè)相冊中的所有圖片
PHFetchResult<PHAsset *> *assetResult = [PHAsset fetchAssetsInAssetCollection:collection options:nil];
for (PHAsset *asset in assetResult) {
// 過濾非圖片
if (asset.mediaType != PHAssetMediaTypeImage) continue;
// 圖片原尺寸
CGSize targetSize = CGSizeMake(asset.pixelWidth, asset.pixelHeight);
// 請求圖片
[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:targetSize contentMode:PHImageContentModeDefault options:imageOptions resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
NSLog(@"圖片:%@", result);
}];
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
iOS項(xiàng)目的開發(fā)命名規(guī)范教程
為了團(tuán)隊(duì)各成員之間代碼的互通、可讀、易維護(hù)性,特制訂此開發(fā)規(guī)范。下面這篇文章主要給大家介紹了關(guān)于iOS項(xiàng)目的開發(fā)命名規(guī)范的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11
iOS開發(fā)上下滑動(dòng)UIScrollview隱藏或者顯示導(dǎo)航欄的實(shí)例
下面小編就為大家分享一篇iOS開發(fā)上下滑動(dòng)UIScrollview隱藏或者顯示導(dǎo)航欄的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
iOS實(shí)現(xiàn)點(diǎn)擊圖片放大和長按保存圖片的示例
本篇文章主要介紹了iOS實(shí)現(xiàn)點(diǎn)擊圖片放大和長按保存圖片的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03
ios8 UITableView設(shè)置 setSeparatorInset UIEdgeInsetsZero不起作用的解決
這篇文章主要介紹了ios8 UITableView設(shè)置 setSeparatorInset UIEdgeInsetsZero不起作用的解決辦法(去掉15px空白間距)的相關(guān)資料,需要的朋友可以參考下2016-02-02
舉例講解iOS應(yīng)用開發(fā)中對設(shè)計(jì)模式中的策略模式的使用
這篇文章主要介紹了iOS應(yīng)用設(shè)計(jì)中對設(shè)計(jì)模式中的策略模式的使用,示例代碼為傳統(tǒng)的Objective-C語言,需要的朋友可以參考下2016-03-03
UITableView中Cell重用機(jī)制導(dǎo)致內(nèi)容重復(fù)的解決方法
這篇文章主要為大家詳細(xì)介紹了UITableView中Cell重用機(jī)制導(dǎo)致內(nèi)容重復(fù)的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06

