美文网首页
图库中创建自己的相册并存储图片、视频等

图库中创建自己的相册并存储图片、视频等

作者: 白菜松 | 来源:发表于2018-02-09 13:59 被阅读13次

    导入库Photos

    1,首先请求权限:
        
    -(void)requestAuthorization {
        
        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
            //用户同意则开始创建。不同意弹出提示
            if (status ==  PHAuthorizationStatusAuthorized) {
                
                [self createFolder];
                
            }  else {
                
                UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"App无法访问你的媒体资料库" message:@"app无法正常使用,现在去设置?" preferredStyle:UIAlertControllerStyleAlert];
                
                UIAlertAction *actionCancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
                    
                }];
                [alert addAction:actionCancel];
                
                UIAlertAction *actionOK = [UIAlertAction actionWithTitle:@"设置" 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,创建

    由于相册名字用户是可以更改的,所以创建成功后应将相册的localIdentifier存储在本地,以便判断读取 。

    
    - (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(@"创建相册文件夹成功!");
                
                if (localIdentifier) {
                    
                    [[NSUserDefaults standardUserDefaults] setObject:localIdentifier forKey:@"AlbumID"];
                }
                
                
            } else {
                NSLog(@"创建相册文件夹失败:%@", error);
            }
        }];
    }
    
    3,保存
    +(void)save:(NSURL *)url finish:(SaveAlbumFinish)saveAlbumFinish {
        
        __block BOOL isHaveAlbum = NO;
        //首先获取相册的集合
        PHFetchResult *collectonResuts = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil];
        //对获取到集合进行遍历
        [collectonResuts enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            PHAssetCollection *assetCollection = obj;
            //根据GetAlbumID判断是否是我们要写入照片的相册
            if ([assetCollection.localIdentifier isEqualToString:GetAlbumID])  {
                
                isHaveAlbum = YES;
                
                [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
                    //请求创建一个Asset
                    PHAssetChangeRequest *assetRequest = [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:url];
                    //请求编辑相册
                    PHAssetCollectionChangeRequest *collectonRequest = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:assetCollection];
                    //为Asset创建一个占位符,放到相册编辑请求中
                    PHObjectPlaceholder *placeHolder = [assetRequest placeholderForCreatedAsset];
                    //相册中添加视频
                    [collectonRequest addAssets:@[placeHolder]];
                    
                } completionHandler:^(BOOL success, NSError *error) {
                    
                    dispatch_async(dispatch_get_main_queue(), ^{
                       
                        if (saveAlbumFinish) {
                            
                            saveAlbumFinish(success, error);
                        }
                        
                    });
                }];
            }
        }];
        
        //没有读取到待存储的相册 
        if (!isHaveAlbum) {
            
            if (saveAlbumFinish) {
            
                saveAlbumFinish(NO, [NSError errorWithDomain:@"没有相册" code:0 userInfo: nil]);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:图库中创建自己的相册并存储图片、视频等

          本文链接:https://www.haomeiwen.com/subject/ugmftftx.html