ios - 使用 SDWebImage block 的 ImageView 上的圆形进度条

标签 ios asynchronous progress-bar nsthread sdwebimage

我正在尝试使用 SDWebImage 实现类似 Instagram 的圆形进度条来加载图像。 1.我正在使用这段代码,但它不能正常工作。将图像应用到 ImageView 后,进度条不会隐藏。

  • 单元格重复使用问题也导致了一些问题。
  • 此外,还发出警告,提示我正在尝试更新后台线程中的进度条。
  • 如何摆脱这些问题

    - (void)setImageInImageView:(UIImageView *)imgv withURLString:(NSString *)str_url {
    
      //GuestDefaultProfilePic
        [imgv sd_setImageWithURL:[NSURL URLWithString:str_url] placeholderImage:[UIImage imageNamed:@"ImageGalleryBackground"] options: SDWebImageHighPriority progress:^(NSInteger receivedSize, NSInteger expectedSize){
    
            NSLog(@"the progress is %f", ((receivedSize*1.0f) * 100) /  expectedSize);
            progressView = [imgv viewWithTag:4321];
    
            if(progressView==nil)
            {
                progressView = [[THCircularProgressView alloc] initWithFrame:CGRectMake(imgv.center.x - 20 , imgv.center.y-20 , 60 , 60)];
                progressView.lineWidth = 5.0f;
                progressView.progressColor = [UIColor whiteColor];
                progressView.progressBackgroundColor = [UIColor grayColor];
    
                progressView.centerLabelVisible = YES;
                progressView.tag = 4321;
                [imgv addSubview:progressView];
            }
    
            dispatch_async(dispatch_get_main_queue(), ^{
                [progressView setPercentage:(receivedSize*1.0f) /  expectedSize];
            });
            if(receivedSize >= expectedSize)
            {
                progressView.hidden = YES;
            }
        }
        completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL){
    
           [progressView setHidden:YES];
            [progressView removeFromSuperview];
            [progressView setPercentage:0];
            [imgv setImage:image];
    
        }];
    
    
    }
    

    最佳答案

    你可以试试这个,

    1. 安装pod“MBCircularProgressBar”
    2. 在自定义单元格上使用 UIView,就像您想要进度 View 一样,并设置 MBCircularProgressBarView 类。

      @IBOutlet weak var progressView: MBCircularProgressBarView!
      
      
          cell.imgAlbum.sd_setImage(with: URL(string: imageUrl), placeholderImage: UIImage(named: "placeholderImage"), options: .highPriority, progress: { (receivedSize :Int, ExpectedSize :Int, url:URL?) in
      
          DispatchQueue.main.async {
              cell.ActivityView.isHidden = false;
              cell.ActivityView.value = CGFloat(receivedSize)
              cell.ActivityView.maxValue = CGFloat(ExpectedSize)
          }
      }) { (image : UIImage?, error : Error?, cacheType : SDImageCacheType?, url:URL?) in
      
          DispatchQueue.main.async {
              UIView.animate(withDuration: 3.0, animations: {() -> Void in
                  cell.ActivityView.isHidden = true;
              })}
      
          cell.imgBlur.removeBlurEffect()
      }
      

    关于ios - 使用 SDWebImage block 的 ImageView 上的圆形进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33370501/

    相关文章:

    iphone - 获取当前调度队列?

    ios - 如何调用ViewController中所有自定义UIView的方法?

    java - 带有 ResponseListener 的 AsyncTask

    javascript - 如何将异步回调中的字符串添加到一起?

    iphone - 如何将 adWhirl 置于 iPhone 屏幕底部?

    ios - 捕获 NSNotification postNotification 的错误

    android - ENOENT(没有这样的文件或目录)尝试打开使用 AsyncTask 从 URL 下载的文件

    javascript - 进度条的进度在循环内时不更新

    silverlight - Windows Phone 中的进度条点间距问题

    ios - 在 WKWebView 中将 EstimatedProgress/ProgressView 变成进度条