一、C語言函數方式實現app
注意:UIImageWriteToSavedPhotosAlbum方法必須實現代理方法,不然會崩潰。框架
//參數1:圖片對象 //參數2:成功方法綁定的target //參數3:成功後調用方法 //參數4:須要傳遞信息(成功後調用方法的參數) UIImageWriteToSavedPhotosAlbum(self.imageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); #pragma mark -- <保存到相冊> -(void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { NSString *msg = nil ; if(error){ msg = @"保存圖片失敗" ; }else{ msg = @"保存圖片成功" ; } }
方法2:使用Photos框架實現異步
PHAsset : 一個PHAsset對象就表明相冊中的一張圖片或者一個視頻
PHAssetCollection : 一個PHAssetCollection 對象就表明一個相冊函數
若是咱們想保存圖片到【相機膠捲】,首先要保證添加一個新的PHAsset對象,那麼如何操做這些對象呢?無非是對這些對象進行增刪改查。fetch
PHAsset
一個PHAsset對象就表明相冊中的一張圖片或者一個視頻
增刪改 PHAssetChangeRequest 包括圖片/視頻相關的改動操做spa查 [PHAsset fetchAssets...];代理
PHAssetCollection
一個PHAssetCollection 對象就表明一個相冊
code增刪改 PHAssetCollectionChangeRequest 包括相冊相關的全部改動操做orm
查
[PHAssetCollection fetchAssetCollectionsContainingAsset:...];
視頻
//保存圖片到【相機膠捲】 /// 異步執行修改操做 [[PHPhotoLibrary sharedPhotoLibrary]performChanges:^{ [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image]; } completionHandler:^(BOOL success, NSError * _Nullable error) { if (error) { NSLog(@"%@",@"保存失敗"); } else { NSLog(@"%@",@"保存成功"); } }];
2.3 Photos03-建立新的相冊
NSError *error = nil; [[PHPhotoLibrary sharedPhotoLibrary]performChangesAndWait:^{ //獲取app名字 NSString *title = [NSBundle mainBundle].infoDictionary[(__bridge NSString*)kCFBundleNameKey]; //建立一個【自定義相冊】 [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title]; } error:&error];
2.4 Photos04-查詢相冊
NSString *title = [NSBundle mainBundle].infoDictionary[(__bridge NSString*)kCFBundleNameKey]; //查詢全部【自定義相冊】 PHFetchResult<PHAssetCollection *> *collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; PHAssetCollection *createCollection = nil; for (PHAssetCollection *collection in collections) { if ([collection.localizedTitle isEqualToString:title]) { createCollection = collection; break; } } if (createCollection == nil) { //當前對應的app相冊沒有被建立 //建立一個【自定義相冊】 NSError *error = nil; __block NSString *createCollectionID = nil; [[PHPhotoLibrary sharedPhotoLibrary]performChangesAndWait:^{ //建立一個【自定義相冊】 createCollectionID = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title].placeholderForCreatedAssetCollection.localIdentifier; } error:&error]; createCollection = [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[createCollectionID] options:nil].firstObject; } NSLog(@"%@",createCollection);
2.5 Photos05-保存圖片到自定義相冊
// 1.先保存圖片到【相機膠捲】 /// 同步執行修改操做 NSError *error = nil; __block PHObjectPlaceholder *placeholder = nil; [[PHPhotoLibrary sharedPhotoLibrary]performChangesAndWait:^{ placeholder = [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image].placeholderForCreatedAsset; } error:&error]; if (error) { NSLog(@"保存失敗"); return; } // 2.擁有一個【自定義相冊】 PHAssetCollection * assetCollection = self.createCollection; if (assetCollection == nil) { NSLog(@"建立相冊失敗"); } // 3.將剛纔保存到【相機膠捲】裏面的圖片引用到【自定義相冊】 [[PHPhotoLibrary sharedPhotoLibrary]performChangesAndWait:^{ PHAssetCollectionChangeRequest *requtes = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection]; [requtes addAssets:@[placeholder]]; } error:&error]; if (error) { NSLog(@"保存圖片失敗"); } else { NSLog(@"保存圖片成功"); }