2017-06-30 80 views
0

我只想设置图像为UIButton并为其创建了IBOutlet。我在上面有一个加载器,当加载图像时,加载器将停止并为该按钮分配一个新图像。当代码被调用时,占位符图像仍和URL图像不加载图像不载入图像

[_Image1 sd_setBackgroundImageWithURL:[NSURL URLWithString:[arrayGallery valueForKey:@"link"][0]] forState:UIControlStateNormal placeholderImage:[UIImage imageNamed:@"blurred-background"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { 
     [_ImageLoader1 stopAnimating]; 
     [_ImageLoader1 removeFromSuperview]; 
    }]; 

回答

1

您正在使用完成块从url下载图像。所以你需要按照下面的方式去做。

[_Image1 sd_setBackgroundImageWithURL:[NSURL URLWithString:[arrayGallery valueForKey:@"link"][0]] forState:UIControlStateNormal placeholderImage:[UIImage imageNamed:@"blurred-background"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { 

      [_Image1 setImage:btnImage forState:UIControlStateNormal];//Don't forgot to check for error if error is nil or image is not nil then only set image 

      [_ImageLoader1 stopAnimating]; 
      [_ImageLoader1 removeFromSuperview]; 
    }]; 
+0

不能使用'_Image1.image =图像'作为按钮 – meowsush

+0

@meowsush检查我编辑的答案,如果它的工作标记为接受的答案 – vivek

0

如果您使用的是完成块为SDWebImageCache,在主线程中完成块内设置图像

[_Image1 sd_setBackgroundImageWithURL:[NSURL URLWithString:[arrayGallery valueForKey:@"link"][0]] forState:UIControlStateNormal placeholderImage:[UIImage imageNamed:@"blurred-background"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { 
     _Image1.image = image; 
     [_ImageLoader1 stopAnimating]; 
     [_ImageLoader1 removeFromSuperview]; 
    }]; 
0

更新映像尝试像这样

[_Image1 sd_setBackgroundImageWithURL:[NSURL URLWithString:[arrayGallery valueForKey:@"link"][0]] forState:UIControlStateNormal placeholderImage:[UIImage imageNamed:@"blurred-background"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { 
     [_ImageLoader1 stopAnimating]; 
     [_ImageLoader1 removeFromSuperview]; 

     dispatch_sync(dispatch_get_main_queue(), ^{ 
      _Image1.image = image; 
     }); 

}]; 
0

NSUrlRequest得到NSDataNSUrl URLWithString “你的网址”

,并转换到NSDataUIImage设置背景图片。

0

首先得到图片的url并检查图片的url长度是否大于零/不是null。并确保图像网址工作正常与否。点击Browser上的url,然后检查您是否获得了正确的图像。

SDWebImage库正在更新按钮图像,但这不会发生在Main Thread上。这可能是不更新UIButtonbackgroundImage的原因。

- (void)sd_setBackgroundImageWithURL:(nullable NSURL *)url 
forState:(UIControlState)state 
placeholderImage:(nullable UIImage *)placeholder 
options:(SDWebImageOptions)options 
completed:(nullable SDExternalCompletionBlock)completedBlock { 
    if (!url) { 
     [self.imageURLStorage removeObjectForKey:@(state)]; 
     return; 
    } 

    NSString *imageURL = [arrayGallery valueForKey:@"link"][0]; 
    self.imageURLStorage[@(state)] = url; 

    __weak typeof(self)weakSelf = self; 
    [self sd_internalSetImageWithURL:url 
        placeholderImage:placeholder 
          options:options 
         operationKey:[NSString stringWithFormat:@"UIButtonBackgroundImageOperation%@", @(state)] 
         setImageBlock:^(UIImage *image, NSData *imageData) { 
          [weakSelf setBackgroundImage:image forState:state]; 
         } 
          progress:nil 
          completed:completedBlock]; 
} 

loader停止动画和上main thread设置UIButton背景图像。

NSString *imageURL = [arrayGallery valueForKey:@"link"][0]; 

if (imageURL.length > 0) { 

    [_Image1 sd_setBackgroundImageWithURL:[NSURL URLWithString:imageURL] forState:UIControlStateNormal placeholderImage:[UIImage imageNamed:@"blurred-background"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [_ImageLoader1 stopAnimating]; 
      [_ImageLoader1 removeFromSuperview]; 
      [_Image1 setBackgroundImage:image forState:UIControlStateNormal]; 
     }); 
    }]; 

}