如何在ios中异步下载图像?
我想首先在滚动视图上创建imageview。在这里我设置了占位符图像或为imageview提供背景色。这样所有的图像视图都会显示出来如何在ios中异步下载图像?,ios,objective-c,asynchronous,objective-c-blocks,Ios,Objective C,Asynchronous,Objective C Blocks,我想首先在滚动视图上创建imageview。在这里我设置了占位符图像或为imageview提供背景色。这样所有的图像视图都会显示出来 - (void)LoadDataInScrollView { dispatch_queue_t imageQueue = dispatch_queue_create("Image Queue",NULL); //totalImageGetDict into count total Number of object and generate ima
- (void)LoadDataInScrollView
{
dispatch_queue_t imageQueue = dispatch_queue_create("Image Queue",NULL);
//totalImageGetDict into count total Number of object and generate imageview.
for (int ivalue = 0; ivalue < [totalImageGetDict count]; ivalue++)
{
dispatch_async(imageQueue, ^{
//define x value
CGFloat xOrigin =ivalue *ascrollView.frame.size.width+50;
imageView = [[UIImageView alloc] init];
imageView.tag = ivalue;
[imageView setBackgroundColor:[UIColor whiteColor]];
imageView.frame = CGRectMake(xOrigin-40,imgYpos, ascrollView.frame.size.width-20, scrollViewHight);
//then here first i set already downloaded image.it's comes from another class. getImageLoadDict into images are already downloaded**
if ([getImageLoadDict objectForKey:[NSNumber numberWithInteger:ivalue]]!= nil)
{
//dispatch_async(dispatch_get_main_queue(), ^{
[imageView setImage:[getImageLoadDict objectForKey:[NSNumber numberWithInteger:ivalue]]];
//});
}
else
{
//totalImageGetDict into remaining images object and asynchronously download here.
STVisionPhoto *photoObj = [totalImageGetDict objectForKey:[NSNumber numberWithInteger:ivalue]];
UIImage *newimage = [photoObj image];
dispatch_async(dispatch_get_main_queue(), ^{
[imageView setImage:newimage];
});
}
[ascrollView addSubview:imageView];
});
}
}
-(void)LoadDataInScrollView
{
调度队列\u t imageQueue=调度队列\u创建(“映像队列”,NULL);
//totalImageGetDict计算对象总数并生成imageview。
对于(int-ivalue=0;ivalue<[totalImageGetDict计数];ivalue++)
{
调度异步(imageQueue^{
//定义x值
CGFloat xOrigin=ivalue*ascrollView.frame.size.width+50;
imageView=[[UIImageView alloc]init];
imageView.tag=ivalue;
[imageView setBackgroundColor:[UIColor whiteColor]];
imageView.frame=CGRectMake(xOrigin-40,imgYpos,ascrollView.frame.size.width-20,scrollViewHight);
//然后在这里首先我设置了已经下载的图像。它来自另一个类。getImageLoadDict到已经下载的图像中**
if([getImageLoadDict objectForKey:[NSNumber numberWithInteger:ivalue]!=nil)
{
//dispatch\u async(dispatch\u get\u main\u queue()^{
[imageView setImage:[getImageLoadDict objectForKey:[NSNumber numberWithInteger:ivalue]];
//});
}
其他的
{
//totalImageGetDict转换为剩余图像对象,并在此处异步下载。
STVisionPhoto*photoObj=[totalImageGetDict objectForKey:[NSNumber numberWithInteger:ivalue]];
UIImage*newimage=[photoObj image];
dispatch\u async(dispatch\u get\u main\u queue()^{
[imageView setImage:newimage];
});
}
[ascrollView addSubview:imageView];
});
}
}
你可以用它来做。它很容易使用
编辑:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage * image = [UIImage imageWithData:[NSData dataWithContentsOfURL:your url]];
dispatch_async(dispatch_get_main_queue(), ^{
[imgview setImage:image];
});
});
如果您不想使用任何库,可以尝试使用此代码:
UIImageView *imgView = [[UIImageView alloc] init];
imgView.frame = CGRectMake(12.5, 12.5, 80, 80);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *profileImage;
profileImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:YOUR_URL_STRING]]];
dispatch_async(dispatch_get_main_queue(), ^{
imgView.image = profileImage;
});
});
[cell.contentView addSubview:imgView];
我不希望使用任何库。+1是为了不(直接)使用NSURLConnection的简单性。+1 ur ans是正确的。我检查并接受它,但它不满足我的条件。Thanx,我尝试了这一点,也遵循了Lazy loader类。+1 ur ans是正确的。我检查并接受它,但它不满足我的条件。您的代码中是否使用ASIHTT或AFNetworking?只是想看看你是否是-然后尝试在后台线程上使用这些类别异步下载图像。@RenoJones,我不使用那个类。我使用Nsurl类调用。啊,好的。然后选择SDWebImage(他们正在以更好的方式处理异步下载),这样你就不必为下载图像而头疼了。
(void)loadImg:(NSString *)url img :(UIImageView *)imgView{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
__weak UIImageView *imageV = imgView;
[imgView setImageWithURLRequest:request placeholderImage:[UIImage imageNamed:@"songRecDef"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
imageV.image = image;
[imageV setNeedsLayout];
NSLog(@"%@",response);
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
[imageV setImage:[UIImage imageNamed:@"songRecDef"]];
NSLog(@"%@",error);
}];
}