我想使用UIScrollview进行延迟加载,并希望添加一些作为Web服务响应的照片。
到目前为止我写的代码如下:
for (int j=0;j<9;j++) {
for (int i=0; i<[mainRestaurantArray count];i++) { //**mainRestaurantArray is the array which has the uiimage in one of it index**
if ([[[mainRestaurantArray objectAtIndex:i] valueForKey:@"Image"] isKindOfClass:[UIImage class]]) {
[CombineArray addObject:[mainRestaurantArray objectAtIndex:i]];
//NSLog(@"cnt=>%d array==>%@",cnt,[CombineArray objectAtIndex:cnt]);
UIButton* btn = [[UIButton alloc]init];
btn.tag = cnt;
btn.frame = CGRectMake(15+(cnt%5)*60, 15+(cnt/5)*60,Width,Height);
btn.backgroundColor = [UIColor greenColor];
[btn setBackgroundImage:[[CombineArray objectAtIndex:cnt] valueForKey:@"Image"] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(Buttonclick:) forControlEvents:UIControlEventTouchUpInside];
[ScrlPhotos addSubview:btn]; //Add the UIButton in UIScrollview
[btn release];
cnt++;
}
}
[mainRestaurantArray release];
counter++;
[self urlcalled]; //Is the method which call the webservice do the parsing and fills the mainRestaurantArray as a responce
}
问题是,尽管添加了代码,但是需要花费很多时间来加载,调用Web服务10次,然后才显示图像。
任何人都可以帮助我吗?
答案 0 :(得分:4)
关键是[self urlCalled]正在发生的事情。它确实看起来像你在那个外部for循环中发出了10个请求。
您使用的是5.0 SDK吗?如果是这样,有一个漂亮的单行代码来发出Web请求并用块处理结果。在5.0上,你可以把它放在你的循环中:
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if (data) {
UIImage *image = [UIImage imageWithData:data];
// use the image how you like, say, as your button background
}
}];
答案 1 :(得分:0)
您可以follow此链接,即使它涉及延迟加载tableview,您也可以将相同的概念应用于uiscrollview。