我正在使用UIImageView
制作幻灯片,并且图片链接在一个数组中,所以当我参与其中时,我了解到SDWebImageManager
只允许点击一次网址然后它会缓存图像供以后使用。
但是我在我的应用中监控的是第一张图片是缓存的,我相信,但第二张图片网址总是被点击。
这是我的代码:
- (void)viewDidLoad {
[super viewDidLoad];
arry = [[NSMutableArray alloc] init];
[arry addObject:@"http://adjingo.2cimple.com/content/151/Image/6291.jpg"];
[arry addObject:@"http://adjingo.2cimple.com/content/151/Image/6290.jpg"];
NSURL *imageURL = [NSURL URLWithString:[arry objectAtIndex:0]];
__block UIActivityIndicatorView *activityIndicator;
__weak UIImageView *weakImageView = self.imageView;
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadImageWithURL:imageURL
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// progression tracking code
if (!activityIndicator) {
[weakImageView addSubview:activityIndicator = [UIActivityIndicatorView.alloc initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]];
//activityIndicator.center = self.imageView.center;
[activityIndicator startAnimating];
}
}
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (image) {
// do something with image
[activityIndicator removeFromSuperview];
activityIndicator = nil;
[self.imageView setImage:image];
}
}];
//Timer to do slideshow for images
timer = [NSTimer scheduledTimerWithTimeInterval: 5.0
target: self
selector: @selector(handleTimer:)
userInfo: nil
repeats: YES];
}
这里是handleTimer
代码,每隔5秒在图片视图中重新加载图片:
-(void) handleTimer: (NSTimer *) timer {
currentImage++;
if ( currentImage >= arry.count )
currentImage = 0;
__block UIActivityIndicatorView *activityIndicator;
__weak UIImageView *weakImageView = self.imageView;
SDWebImageManager *manager = [SDWebImageManager sharedManager];
[manager downloadImageWithURL:imageURL
options:0
progress:^(NSInteger receivedSize, NSInteger expectedSize) {
// progression tracking code
if (!activityIndicator) {
[weakImageView addSubview:activityIndicator = [UIActivityIndicatorView.alloc initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]];
//activityIndicator.center = self.imageView.center;
[activityIndicator startAnimating];
}
}
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (image) {
// do something with image
[activityIndicator removeFromSuperview];
activityIndicator = nil;
[self.imageView setImage:image];
}
}];
}
我在这里监控网络使用情况:
如果我错误地使用了SDWebImageManager
,请引导我。
由于
答案 0 :(得分:0)
我的母语是中文,而不是英文。也许我无法清楚地表达自己的想法,而我会尽力告诉我的想法。如果我迷惑你,我会感到抱歉。
我无法播放SDWebimage因为我的国家有时会阻止谷歌,所以我无法重现你的场景。虽然我仍然给你一些可能对你有帮助的建议
首先,您给了我们一些上下文。也许您可以发布有关成员变量和属性的更多信息。当我将您的代码复制到Xcode时。我需要自己添加它们。
其次,你的意思是你使用左
NSURL *imageURL = [NSURL URLWithString:[arry objectAtIndex:1]];,
sdwebimage每次都会点击网址,而不是使用缓存网址?你可以通过NSLog获取cacheType的图像源。
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) {
if (image) {
NSLog(@"%d",cacheType);
[activityIndicator removeFromSuperview];
activityIndicator = nil;
[self.imageView setImage:image];
}
}];`
SDImageCacheTypeNone表示图像来自网络。
SDImageCacheTypeDisk表示图像来自磁盘。
SDImageCacheTypeMemory表示图像来自内存。
第三,因为downloadWithURL:options:completed:
不在主线程上。我怀疑这个序列与你的想法是一样的。