photos

1.查詢相冊(cè)使用權(quán)限
PHAuthorizationStatus st = [PHPhotoLibrary authorizationStatus];
if (PHAuthorizationStatusDenied == st || PHAuthorizationStatusRestricted == st) {
NSLog(@"相冊(cè)不允許訪問");
}
if (PHAuthorizationStatusAuthorized == st || PHAuthorizationStatusNotDetermined == st) {
NSLog(@"相冊(cè)允許訪問or用戶未選擇");
}

//相冊(cè)變更
[[PHPhotoLibrary sharedPhotoLibrary] registerChangeObserver:self];
//回調(diào)方法如下,不過這個(gè)地方是有一個(gè)坑的抛姑,就是這個(gè)回調(diào)是在一個(gè)子線程里面聂喇,如果你想要對(duì)UI進(jìn)行操作的話氮采,則必須回調(diào)主線程
//相冊(cè)變化回調(diào)

  • (void)photoLibraryDidChange:(PHChange *)changeInstance {
    dispatch_sync(dispatch_get_main_queue(), ^{
    // your codes
    });
    }

2.創(chuàng)建自己的相冊(cè)

[[PHPhotoLibrary sharedPhotoLibrary]performChanges:^{
[PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:@"相冊(cè)名字"];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
}];

3.獲取自己創(chuàng)建的相冊(cè)

PHFetchResult *userAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:nil];
PHAssetCollection *collection = nil;
for (PHAssetCollection *accc in userAlbums) {
if ([accc.localizedTitle isEqualToString:@"相冊(cè)名字"]) {
collection = accc;
}
}

4.保存圖片到自己相冊(cè) —-刪除指定相片類似

  • (void)addCustomAsset:(UIImage *)image
    collection:(PHAssetCollection *)collection
    completionHandler:(void (^)(void))successBlock
    failture:(void (^)(NSString * _Nonnull))failtureBlock
    {
    //執(zhí)行變化請(qǐng)求
    [self.photoLibaray performChanges:^{
    //如果相冊(cè)允許操作
    if([collection canPerformEditOperation:PHCollectionEditOperationAddContent]){
    //創(chuàng)建資源請(qǐng)求對(duì)象
    PHAssetChangeRequest * assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];
    //創(chuàng)建相冊(cè)請(qǐng)求對(duì)象
    PHAssetCollectionChangeRequest * groupChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection];
    //向相冊(cè)中添加資源慢逾。要?jiǎng)h除相片肥橙,換個(gè)方法即可
    [groupChangeRequest addAssets:@[assetChangeRequest.placeholderForCreatedAsset]];
    }
    }completionHandler:^(BOOL success, NSError * _Nullable error) {
    if (success == YES)//成功 {
    successBlock();return;
    }
    //失敗
    failtureBlock(error.localizedDescription);
    }];
    }

5.保存視頻到自己相冊(cè)

  • (void)addCustomAsset2:(NSURL *)url
    collection:(PHAssetCollection *)collection
    completionHandler:(void (^)(void))successBlock
    failture:(void (^)(NSString * _Nonnull))failtureBlock {
    //執(zhí)行變化請(qǐng)求
    [self.photoLibaray performChanges:^{
    //如果相冊(cè)允許操作
    if([collection canPerformEditOperation:PHCollectionEditOperationAddContent]){
    //創(chuàng)建資源請(qǐng)求對(duì)象
    PHAssetChangeRequest * assetChangeRequest = [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:url];
    //創(chuàng)建相冊(cè)請(qǐng)求對(duì)象
    PHAssetCollectionChangeRequest * groupChangeRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:collection];
    //向相冊(cè)中添加資源
    [groupChangeRequest addAssets:@[assetChangeRequest.placeholderForCreatedAsset]];
    }
    }completionHandler:^(BOOL success, NSError * _Nullable error) {
    if (success == true)//成功 {
    successBlock();return;
    }
    //失敗
    failtureBlock(error.localizedDescription);
    }];
    }

6.保存圖片/視頻到相機(jī)膠卷

UISaveVideoAtPathToSavedPhotosAlbum(self.videoPath, self, @selector(video:didFinishSavingWithError:contextInfo:), NULL);

UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);

//圖片保存回調(diào)

  • (void)image: (UIImage *) image didFinishSavingWithError: (NSError *) error contextInfo: (void *) contextInfo {
    NSLog(@"保存成功與否提示");
    }

//錄像保存完畢

  • (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo: (void *)contextInfo {
    NSLog(@"保存成功與否提示");
    }

7.獲取自己相冊(cè)的圖片

PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
//按創(chuàng)建日期排序,最新在前面
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
//篩選圖片摸恍,只要圖片赶诊。只要視頻mediaType=2
fetchOptions.predicate = [NSPredicate predicateWithFormat:@"mediaType=1"];
//collection 可以從前面方法獲取到
PHFetchResult *albumsPic = [PHAsset fetchAssetsInAssetCollection:collection options:fetchOptions];
//獲取第二張圖
PHAsset *asset = albumsPic[1];
PHCachingImageManager *imageManager = [[PHCachingImageManager alloc] init];
//可以設(shè)置options,獲取到圖片的質(zhì)量
// PHImageRequestOptions *options = [PHImageRequestOptions new];
// options.version = PHImageRequestOptionsVersionCurrent;
// options.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat;
// options.resizeMode = PHImageRequestOptionsResizeModeFast;
[imageManager requestImageForAsset:asset
targetSize:AssetGridThumbnailSize
contentMode:PHImageContentModeDefault
options:nil//options
resultHandler:^(UIImage *result, NSDictionary *info) {
self.imageView.image = result;
}];

8.獲取膠卷所以圖片/視頻/音頻

PHFetchOptions *options = [[PHFetchOptions alloc] init];
/// 按創(chuàng)建日期排序
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
//獲取膠卷所有圖片逸贾。要獲取視頻陨仅,把類型改為PHAssetMediaTypeVideo津滞,音頻的為PHAssetMediaTypeAudio
PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:options];

//枚舉里面的內(nèi)容
[result enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
PHAsset *asset = (PHAsset *)obj;
}];

9.只能相冊(cè)獲取

//獲取所有智能相冊(cè)
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
[smartAlbums enumerateObjectsUsingBlock:^(PHAssetCollection * _Nonnull collection, NSUInteger idx, BOOL *stop) {
NSLog(@"相冊(cè)名字:%@", collection.localizedTitle);
}];

//智能相冊(cè)的title不出意外都是英文,下面提供一個(gè)對(duì)應(yīng)的中文名

  • (NSString *)transformAblumTitle:(NSString *)title
    {
    if ([title isEqualToString:@"Slo-mo"]) {
    return @"慢動(dòng)作";
    } else if ([title isEqualToString:@"Recently Added"]) {
    return @"最近添加";
    } else if ([title isEqualToString:@"Favorites"]) {
    return @"最愛";
    } else if ([title isEqualToString:@"Recently Deleted"]) {
    return @"最近刪除";
    } else if ([title isEqualToString:@"Videos"]) {
    return @"視頻";
    } else if ([title isEqualToString:@"All Photos"]) {
    return @"所有照片";
    } else if ([title isEqualToString:@"Selfies"]) {
    return @"自拍";
    } else if ([title isEqualToString:@"Screenshots"]) {
    return @"屏幕快照";
    } else if ([title isEqualToString:@"Camera Roll"]) {
    return @"相機(jī)膠卷";
    }
    return nil;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灼伤,一起剝皮案震驚了整個(gè)濱河市触徐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狐赡,老刑警劉巖撞鹉,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異颖侄,居然都是意外死亡鸟雏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門览祖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來孝鹊,“玉大人,你說我怎么就攤上這事展蒂∮只睿” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵锰悼,是天一觀的道長(zhǎng)皇钞。 經(jīng)常有香客問我,道長(zhǎng)松捉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任馆里,我火速辦了婚禮隘世,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鸠踪。我一直安慰自己丙者,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布营密。 她就那樣靜靜地躺著械媒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪评汰。 梳的紋絲不亂的頭發(fā)上纷捞,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音被去,去河邊找鬼主儡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛惨缆,可吹牛的內(nèi)容都是我干的糜值。 我是一名探鬼主播丰捷,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼寂汇!你這毒婦竟也來了病往?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤骄瓣,失蹤者是張志新(化名)和其女友劉穎停巷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體累贤,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叠穆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了臼膏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硼被。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖渗磅,靈堂內(nèi)的尸體忽然破棺而出嚷硫,到底是詐尸還是另有隱情,我是刑警寧澤始鱼,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布仔掸,位于F島的核電站,受9級(jí)特大地震影響医清,放射性物質(zhì)發(fā)生泄漏起暮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一会烙、第九天 我趴在偏房一處隱蔽的房頂上張望负懦。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背躯枢。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留槐臀,地道東北人闺金。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像峰档,于是被迫代替她去往敵國(guó)和親败匹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寨昙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容