【问题标题】:How to delete an image from photo library using UIImagePickerController如何使用 UIImagePickerController 从照片库中删除图像
【发布时间】:2016-05-02 05:48:01
【问题描述】:

我在我的应用程序中使用UIImagePickerController 来获取图像。在我的应用程序中拾取这张图片后,我需要从 iOS PhotoLibrary 中同步删除它。

- (BOOL)createAndInsertNewElementFromDictionary:(NSDictionary*)dict
{
AlbumElement *newElement;

if ([dict[UIImagePickerControllerMediaType]
     isEqualToString:(NSString*)kUTTypeMovie])
{
    NSURL *mediaUrl = dict[UIImagePickerControllerMediaURL];
    newElement = [AlbumElement createElementWithMediaUrl:mediaUrl
                                                 inAlbum:_album.name];

}
else if ([dict[UIImagePickerControllerMediaType]
          isEqualToString:(NSString*)kUTTypeImage])
{
    UIImage *image = [dict[UIImagePickerControllerOriginalImage] copy];
    newElement = [AlbumElement createElementWithImage:image
                                              inAlbum:_album.name];
}

if (newElement != nil)
{
    [_album.elements insertObject:newElement atIndex:0];

    UIImage *icon = [UIImage imageWithContentsOfFile:[newElement iconFullPath]];
    [AlbumElement writeImageToFileWithImage:icon
                                 atFullPath:_album.albumIconPath];
}
else
{
    NSLog(@"Element was NOT added!");
    return NO;
}

return YES;
}

【问题讨论】:

    标签: ios objective-c iphone uiimagepickercontroller


    【解决方案1】:
    NSURL *url = [dict objectForKey:@"UIImagePickerControllerReferenceURL"] ;  
    
    PHPhotoLibrary *library = [PHPhotoLibrary sharedPhotoLibrary];
     [library performChanges:^{
    // Here assetsURLs is array of url's you want to delete 
        PHFetchResult *assetsToBeDeleted = [PHAsset fetchAssetsWithALAssetURLs:[NSArray arrayWithObject:url] options:nil];
        [PHAssetChangeRequest deleteAssets:assetsToBeDeleted];
    } completionHandler:^(BOOL success, NSError *error)
     {
         // Check error and success here
    }];
    

    【讨论】:

    • 嗨,谢谢它对我来说很好用。但是删除照片时会显示消息。如何修改该消息。
    • 这是确认消息,默认情况下来自苹果的这种方法你不能隐藏它。如果我找到另一种方法,我会分享。欲了解更多信息,请查看此链接stackoverflow.com/questions/31922796/…
    • 是否可以从照片库中选择多张图片。
    • 默认没有,但您可以通过 3rd 方库将其作为github.com/w5mith/WSAssetPickerController
    • 如果您使用相机拍摄图像,则不会保存在照片库中。
    【解决方案2】:

    你可以这样做,

     -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
    
    
    NSURL *imgURL = info[UIImagePickerControllerReferenceURL];
    
    [[PHPhotoLibrary sharedPhotoLibrary]performChanges:^{
    
    
        PHAsset *imageAssetTodelete = [PHAsset fetchAssetsWithALAssetURLs:imgURL options:nil];
    
        [PHAssetChangeRequest deleteAssets:imageAssetTodelete];
    
    
    } completionHandler:^(BOOL success, NSError * _Nullable error) {
    
        if (error) {
    
            NSLog(@"err description : %@",[error localizedDescription]);
        }
        if (success) {
    
            NSLog(@"image deleted successfully");
        }
    
    
    }];
    
     }
    

    别忘了在课堂上@import Photos;

    希望这会有所帮助:)

    【讨论】:

      【解决方案3】:

      我使用与#MOHAMMAD ISHAQ 相同的代码,但在我的情况下它不起作用,图片没有被删除,我没有任何错误。 请问有什么帮助或建议吗?

      PHAsset *asset = nil;
      PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
      fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
      PHFetchResult *fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions];
      if (fetchResult != nil && fetchResult.count > 0) {
          // get last photo from Photos
          asset = [fetchResult lastObject];
      }
      
      if (asset) {
          
          PHContentEditingInputRequestOptions *editOptions = [[PHContentEditingInputRequestOptions alloc] init];
      
          [asset requestContentEditingInputWithOptions:editOptions completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
      
              if (contentEditingInput.fullSizeImageURL) {
                  //do something with contentEditingInput.fullSizeImageURL
                  
                  NSLog(@"¨PATH %@",contentEditingInput.fullSizeImageURL);
                  
                  NSMutableArray *persons = [[NSMutableArray alloc]initWithCapacity:0];
                  [persons addObject:contentEditingInput.fullSizeImageURL];
                  
                  NSArray *myArray = [[NSArray alloc]initWithArray:persons];
                  
                  PHPhotoLibrary *library = [PHPhotoLibrary sharedPhotoLibrary];
                
                  [library performChanges:^{
                     
          
                      PHFetchResult *assetsToBeDeleted = [PHAsset fetchAssetsWithALAssetURLs:myArray options:nil];
             
                      [PHAssetChangeRequest deleteAssets:assetsToBeDeleted];
                  } completionHandler:^(BOOL success, NSError *error)
                   {
                       //do something here
                      NSLog(@"DELETE IAMGE");
                  }];
              }
      
          }];
      

      谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多