Iphone sdwebImage setImageWithURL:占位符图像:已完成:
我使用SDWebImage新版本并调用:Iphone sdwebImage setImageWithURL:占位符图像:已完成:,iphone,sdwebimage,Iphone,Sdwebimage,我使用SDWebImage新版本并调用: self.imgIndicatorView.center=self.img.center; self.imgIndicatorView.hidden=NO; [ self.imgIndicatorView startAnimating]; __block UIActivityIndicatorView *indicatorView= self.imgIndicatorView; NSLog(@"myTopics
self.imgIndicatorView.center=self.img.center;
self.imgIndicatorView.hidden=NO;
[ self.imgIndicatorView startAnimating];
__block UIActivityIndicatorView *indicatorView= self.imgIndicatorView;
NSLog(@"myTopics.img.small=%@",myTopics.img.small);
[self.img setImageWithURL:[NSURL URLWithString:@"http://ww1.sinaimg.cn/thumbnail/acc940bdj.jpg"]
placeholderImage:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType){
NSLog(@"newImageNotCached:break.png myTopics.img.small" );
if(!error ){
CGRect sFrame=self.img.frame;
CGSize newSize=image.size;
if (newSize.height>80) {
if (newSize.width>newSize.height) {
newSize.height=newSize.height *80.0/image.size.width;
newSize.width=80;
}else{
newSize.height=80;
newSize.width=newSize.width*80.0/image.size.height;
}
}else{
if (newSize.width>80) {
newSize.height=newSize.height *80.0/image.size.width;
newSize.width=80;
}else{
}
}
sFrame.size=newSize;
self.img.frame=sFrame;
indicatorView.hidden=YES;
[indicatorView stopAnimating];
[indicatorView removeFromSuperview];
}else{
self.img.image=[UIImage newImageNotCached:@"break.png"];
indicatorView.hidden=YES;
[indicatorView stopAnimating];
[indicatorView removeFromSuperview];
}
}];
但有时日志NSLog(@“newImageNotCached:break.png myTopics.img.small”)不会显示url(@”)是否为break。因此指示符视图始终存在。为什么该方法不调用已完成的块?中。UIImageView+WebCache.m第55行
if (url)
{
__weak UIImageView *wself = self;
id<SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadWithURL:url options:options progress:progressBlock completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
{
__strong UIImageView *sself = wself;
if (!sself) return;
if (image)
{
sself.image = image;
[sself setNeedsLayout];
}
if (completedBlock && finished) // NOTE: finished == YES, the completedBlock could be called.
{
completedBlock(image, error, cacheType);
}
}];
objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
因此,您编写的completedBlock将仅在第一次(发生错误时)调用
if (!url || !completedBlock || (!(options & SDWebImageRetryFailed) && [self.failedURLs containsObject:url])) // NOTE: failedURLs contain the url
{
// TIPS: ERROR OCCURED, DO NOTHING
if (completedBlock) {
// NOTE: finished flag was NO. Please set it as YES, And try again.
completedBlock(nil, nil, SDImageCacheTypeNone, NO);
}
return operation;
}