如何在SDWebImage中显示活动指示器

raa*_*aaz 16 iphone uiactivityindicatorview sdwebimage

目前我正在通过以下方式将SDWebImage集成到我的项目中

1)#import"UIButton + WebCache.h"

2)[button setImageWithURL:url placeholderImage:[UIImage imageNamed:@"no_photo.png"]];

因此,它将在相应按钮上方显示URL中显示的图像列表.

但是现在我想在下载图像时在按钮上方显示一个活动指示器,那么我该怎么做呢?

Ank*_*pta 62

像我的魅力一样:

斯威夫特3:

imgView.setShowActivityIndicator(true)
imgView.setIndicatorStyle(.gray)
imgView.sd_setImage(with: URL(string: urlString), placeholderImage: UIImage(named: "placeholder"))
Run Code Online (Sandbox Code Playgroud)

Swift 4 :(编辑:更新)

imgView.sd_setShowActivityIndicatorView(true)
imgView.sd_setIndicatorStyle(.gray)
imgView.sd_setImage(with: URL(string: urlString), placeholderImage: UIImage(named: "placeholder"))
Run Code Online (Sandbox Code Playgroud)

  • 这应该是选定的答案.真正的魅力 (3认同)

E-R*_*die 5

最后的解决方案

您可以下载UIActivityIndi​​cator-for-SDWebImage,这是将UIActivityView添加到SDWebImage视图的最简单方法。使用CocoaPods,只需将此行添加到您的podfile中:

pod 'UIActivityIndicator-for-SDWebImage'
Run Code Online (Sandbox Code Playgroud)

您可以根据自己的喜好使用以下任一行:

- (void)setImageWithURL:(NSURL *)url usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)activityStyle;
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)activityStyle;
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)activityStyle;
- (void)setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completedBlock usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)activityStyle;
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)activityStyle;
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)activityStyle;
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletionBlock)completedBlock usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)activityStyle;
Run Code Online (Sandbox Code Playgroud)

使用例

刚导入

#import <UIActivityIndicator-for-SDWebImage/UIImageView+UIActivityIndicatorForSDWebImage.h>
Run Code Online (Sandbox Code Playgroud)

并使用此代码

[imageView setImageWithURL:[NSURL URLWithString:@"https://media.licdn.com/mpr/mpr/wc_200_200/p/1/005/07f/0a3/30cb8dd.jpg"] placeholderImage:[UIImage imageNamed:@"myImage.jpg"] usingActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
Run Code Online (Sandbox Code Playgroud)


ste*_*uss 4

我发现执行此操作的最佳方法是使用 SDWebImageManager 类。然后,您的视图控制器或其他一些类将需要符合 SDWebImageManagerDelegate 协议。

SDWebImageManager *manager = [SDWebImageManager sharedManager];
UIImage *cachedImage = [manager imageWithURL:url];

if (cachedImage) {
    [button setImage:cachedImage];
    // stop or remove your UIActivityIndicatorView here
}
else {
    [manager downloadWithURL:url delegate:self];
}
Run Code Online (Sandbox Code Playgroud)

下载图像后,将调用委托方法:

- (void)webImageManager:(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)image {
    [button setImage:image];
    // stop or remove your UIActivityIndicatorView here
}
Run Code Online (Sandbox Code Playgroud)

当下载图像发生错误时,还有一个委托方法

- (void)webImageManager:(SDWebImageManager *)imageManager didFailWithError:(NSError *)error {
    // Handle error here
}
Run Code Online (Sandbox Code Playgroud)

如果您有多个按钮,则在图像下载后确定哪张图像属于哪个按钮时可能会遇到问题。在这种情况下,您可能需要一个按钮子类来处理上述下载,然后更新其自己的图像。

希望有帮助。