将图像保存到库时不显示 HUD 微调器

Posted

技术标签:

【中文标题】将图像保存到库时不显示 HUD 微调器【英文标题】:HUD Spinner does not appear when saving image to library 【发布时间】:2011-10-21 10:09:06 【问题描述】:

您好,我正在实现“将图像保存到库”功能,如下面的代码 sn-p 所示。基本上,当用户触摸页面上的图像时会触发照片保存。

TouchImageView *tiv = [[TouchImageView  alloc]initWithFrame:blockFrame];
        [tiv setCompletionHandler:^(NSString *imageUrl)
            //Spinner should start after user clicks on an image
            MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
            hud.labelText = @"Saving photo to library";

            //trigger method to save image to library
            [self saveImageToLibrary];

        ];


-(void) saveImageToLibrary

    //convert url to uiimage
    UIImage *selectedImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageURL]]]; 

    //Save image to album
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];  
    // Request to save the image to camera roll  
    [library writeImageToSavedPhotosAlbum:[selectedImage CGImage] orientation:(ALAssetOrientation)[selectedImage imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error)  

        [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES];

        if (error)   
            NSLog(@"error");  
         else   
            NSLog(@"url %@", assetURL);  
            //Trigger get photo from library function
            self.imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
            [self presentModalViewController:self.imgPicker animated:YES];

          

    ];  
    [library release];     

问题是HUD微调器没有出现(延迟3-4秒后),我怀疑'writeImageToSavedPhotosAlbum:'是同步的并且锁定了显示HUD微调器的过程。这是正确的吗?如何解决微调器显示的滞后问题?

【问题讨论】:

【参考方案1】:

是的,没错。替换调用

 [self saveImageToLibrary];

通过

[self performSelector:@selector(saveImageToLibrary) withObject:nil afterDelay:0];

这样 HUD 就有机会在您保存之前显示自己。

【讨论】:

谢谢,这行得通!澄清一下,这个 performSelector 到底做了什么?谢谢! 你的应用程序执行一个“runloop”,基本上是一个***的永不终止的while循环。在循环的每次迭代开始时,UI 都会更新。当你调用一个方法来改变 UI 时,直到循环的下一次迭代,UI 才会真正改变。因此,当您执行长时间运行的操作(例如您的保存操作)时,该请求在您的保存操作完成之前不会执行,这违背了 HUD 的目的 :) 我在 ***.com/questions/7452925/… 上更详细地解释了这一点。跨度> 哦,performSelector 说:“在 runloop 的下一次迭代中调用这个方法”——这样它将在显示 HUD 后执行。 谢谢!这为我解决了问题:) 在这里感谢您的帮助

以上是关于将图像保存到库时不显示 HUD 微调器的主要内容,如果未能解决你的问题,请参考以下文章

setNetworkActivityIndi​​catorVisible 微调器不显示

将图像从 URL 保存到库,重命名并使用 Swift 共享它

Xamarin.Android FCM 通知在应用程序关闭/后台时不显示在 HUD 中

Xamarin iOS ALAssetsLibrary WriteVideoToSavedPhotosAlbum 不保存到库

将组件从应用程序移动到库时出错

Spinner 不显示数组和文本