IOS 將圖片保存相冊,以及自定義相冊關聯

1.請求訪問權限 2.保存圖片到默認相冊 3.新建自定義相冊,首先進行判斷是否有相冊 4.將默認相冊中保存的圖片進行引用到自定義相冊中.async

若是隻是保存圖片到默認相冊,3,4能夠不作.fetch

- (IBAction)save {
    PHAuthorizationStatus oldStatus = [PHPhotoLibrary authorizationStatus];
    
    // 請求\檢查訪問權限 :
    // 若是用戶尚未作出選擇,會自動彈框,用戶對彈框作出選擇後,纔會調用block
    // 若是以前已經作過選擇,會直接執行block
    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
        dispatch_async(dispatch_get_main_queue(), ^{
            if (status == PHAuthorizationStatusDenied) { // 用戶拒絕當前App訪問相冊
                if (oldStatus != PHAuthorizationStatusNotDetermined) {
                    XMGLog(@"提醒用戶打開開關")
                }
            } else if (status == PHAuthorizationStatusAuthorized) { // 用戶容許當前App訪問相冊
                [self saveImageIntoAlbum];
            } else if (status == PHAuthorizationStatusRestricted) { // 沒法訪問相冊
                [SVProgressHUD showErrorWithStatus:@"因系統緣由,沒法訪問相冊!"];
            }
        });
    }];
}

//保存圖片到默認相冊spa

- (PHFetchResult<PHAsset *> *)createdAssets
{
     NSError *error = nil;
    __block NSString *assetID = nil;
    
    // 保存圖片到【相機膠捲】
    [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
        assetID = [PHAssetChangeRequest creationRequestForAssetFromImage:self.imageView.image].placeholderForCreatedAsset.localIdentifier;
    } error:&error];
    
    if (error) return nil;
    
    // 獲取剛纔保存的相片
    return [PHAsset fetchAssetsWithLocalIdentifiers:@[assetID] options:nil];
}
/**
 *  保存圖片到相冊
 */
- (void)saveImageIntoAlbum
{
    // 得到相片
    PHFetchResult<PHAsset *> *createdAssets = self.createdAssets;
    if (createdAssets == nil) {
        [SVProgressHUD showErrorWithStatus:@"保存圖片失敗!"];
        return;
    }
    
    // 得到相冊
    PHAssetCollection *createdCollection = self.createdCollection;
    if (createdCollection == nil) {
        [SVProgressHUD showErrorWithStatus:@"建立或者獲取相冊失敗!"];
        return;
    }
    
    // 添加剛纔保存的圖片到【自定義相冊】
    NSError *error = nil;
    [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
        PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:createdCollection];
        [request insertAssets:createdAssets atIndexes:[NSIndexSet indexSetWithIndex:0]];
    } error:&error];
    
    // 最後的判斷
    if (error) {
        [SVProgressHUD showErrorWithStatus:@"保存圖片失敗!"];
    } else {
        [SVProgressHUD showSuccessWithStatus:@"保存圖片成功!"];
    }
}
#pragma mark - 得到當前App對應的自定義相冊
- (PHAssetCollection *)createdCollection
{
    // 得到軟件名字
    NSString *title = [NSBundle mainBundle].infoDictionary[(__bridge NSString *)kCFBundleNameKey];
    
    // 抓取全部的自定義相冊
    PHFetchResult<PHAssetCollection *> *collections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];
    
    // 查找當前App對應的自定義相冊
    for (PHAssetCollection *collection in collections) {
        if ([collection.localizedTitle isEqualToString:title]) {
            return collection;
        }
    }
    
    /** 當前App對應的自定義相冊沒有被建立過 **/
    // 建立一個【自定義相冊】
    NSError *error = nil;
    __block NSString *createdCollectionID = nil;
    [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
        createdCollectionID = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:title].placeholderForCreatedAssetCollection.localIdentifier;
    } error:&error];
    
    if (error) return nil;
    
    // 根據惟一標識得到剛纔建立的相冊
    return [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[createdCollectionID] options:nil].firstObject;
}
相關文章
相關標籤/搜索