Ленивая загрузка в UIScrollview - PullRequest
1 голос
/ 17 марта 2012

Я хочу выполнить отложенную загрузку с помощью UIScrollview и хочу добавить несколько фотографий, которые приходят в ответ от веб-службы.

Код, который я написал до сих пор, выглядит следующим образом:

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
    }

Проблема в том, что, несмотря на добавление кода abouve, загрузка занимает много времени, вызывает веб-службу примерно 10 раз и отображает изображения только тогда.

Может ли кто-нибудь помочь мне, пожалуйста?

Ответы [ 2 ]

4 голосов
/ 17 марта 2012

Ключ - это то, что происходит в [self urlCalled]. Похоже, что вы запускаете 10 запросов в этом внешнем цикле for.

Используете ли вы 5.0 SDK? Если это так, есть изящная однострочная строка для выполнения веб-запроса и обработки результата с помощью блока. На 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
    }
}];
0 голосов
/ 17 марта 2012

вы можете перейти по этой ссылке, даже если она касается отложенной загрузки табличного представления, вы можете применить ту же концепцию к uiscrollview.

...