圖庫中創(chuàng)建自己的相冊(cè)并存儲(chǔ)圖片、視頻等

導(dǎo)入庫Photos

1,首先請(qǐng)求權(quán)限:
    
-(void)requestAuthorization {
    
    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
        //用戶同意則開始創(chuàng)建。不同意彈出提示
        if (status ==  PHAuthorizationStatusAuthorized) {
            
            [self createFolder];
            
        }  else {
            
            UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"App無法訪問你的媒體資料庫" message:@"app無法正常使用,現(xiàn)在去設(shè)置?" preferredStyle:UIAlertControllerStyleAlert];
            
            UIAlertAction *actionCancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
                
            }];
            [alert addAction:actionCancel];
            
            UIAlertAction *actionOK = [UIAlertAction actionWithTitle:@"設(shè)置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                
                NSURL * url = [NSURL  URLWithString: UIApplicationOpenSettingsURLString];
                
                if ( [[UIApplication sharedApplication] canOpenURL: url] ) {
                    
                    NSURL*url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
                    [[UIApplication sharedApplication] openURL:url];
                    
                }
                
            }];
            
            [alert addAction:actionOK];
            
            dispatch_async(dispatch_get_main_queue(), ^{
                
                [self presentViewController:alert animated:YES completion:nil];
                
            });
            
        }
    }];
}

2,創(chuàng)建

由于相冊(cè)名字用戶是可以更改的,所以創(chuàng)建成功后應(yīng)將相冊(cè)的localIdentifier存儲(chǔ)在本地,以便判斷讀取 。


- (void)createFolder {
    
    if(GetAlbumID) {
        
        return;
    }
    
    __block  NSString *localIdentifier = nil;
    
    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
        
        PHAssetCollectionChangeRequest *req =  [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:VideoAlbumName];
        localIdentifier =  req.placeholderForCreatedAssetCollection.localIdentifier;
        
    } completionHandler:^(BOOL success, NSError * _Nullable error) {
        
        if (success) {
            
            NSLog(@"創(chuàng)建相冊(cè)文件夾成功!");
            
            if (localIdentifier) {
                
                [[NSUserDefaults standardUserDefaults] setObject:localIdentifier forKey:@"AlbumID"];
            }
            
            
        } else {
            NSLog(@"創(chuàng)建相冊(cè)文件夾失敗:%@", error);
        }
    }];
}
3,保存
+(void)save:(NSURL *)url finish:(SaveAlbumFinish)saveAlbumFinish {
    
    __block BOOL isHaveAlbum = NO;
    //首先獲取相冊(cè)的集合
    PHFetchResult *collectonResuts = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
    //對(duì)獲取到集合進(jìn)行遍歷
    [collectonResuts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        PHAssetCollection *assetCollection = obj;
        //根據(jù)GetAlbumID判斷是否是我們要寫入照片的相冊(cè)
        if ([assetCollection.localIdentifier isEqualToString:GetAlbumID])  {
            
            isHaveAlbum = YES;
            
            [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
                //請(qǐng)求創(chuàng)建一個(gè)Asset
                PHAssetChangeRequest *assetRequest = [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:url];
                //請(qǐng)求編輯相冊(cè)
                PHAssetCollectionChangeRequest *collectonRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];
                //為Asset創(chuàng)建一個(gè)占位符,放到相冊(cè)編輯請(qǐng)求中
                PHObjectPlaceholder *placeHolder = [assetRequest placeholderForCreatedAsset];
                //相冊(cè)中添加視頻
                [collectonRequest addAssets:@[placeHolder]];
                
            } completionHandler:^(BOOL success, NSError *error) {
                
                dispatch_async(dispatch_get_main_queue(), ^{
                   
                    if (saveAlbumFinish) {
                        
                        saveAlbumFinish(success, error);
                    }
                    
                });
            }];
        }
    }];
    
    //沒有讀取到待存儲(chǔ)的相冊(cè) 
    if (!isHaveAlbum) {
        
        if (saveAlbumFinish) {
        
            saveAlbumFinish(NO, [NSError errorWithDomain:@"沒有相冊(cè)" code:0 userInfo: nil]);
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容