在UIScrollview中加载延迟

时间:2012-03-17 05:43:28

标签: iphone uiscrollview lazy-loading

我想使用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次,然后才显示图像。

任何人都可以帮助我吗?

2 个答案:

答案 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。