2013-07-22 2 views
0

Я использую классы AsyncImageView для применения ленивой загрузки на UITableView. И хотите применить индикатор активности при просмотре изображения до тех пор, пока изображение не будет загружено в ячейку. Ниже мой код я пытаюсь.Показать индикатор активности с ленивой загрузкой с использованием классов AsyncImageView

// AsyncIamgeView.m 

- (void)connectionDidFinishLoading:(NSURLConnection*)theConnection { 

//[connection release]; 
UIActivityIndicatorView  *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
indicator.center = CGPointMake(15, 15); 

connection=nil; 

if ([[self subviews] count]>0) { 
    [[[self subviews] objectAtIndex:0] removeFromSuperview]; 
} 

UIImage *imgData = [UIImage imageWithData:data]; 
UIImageView* imageView = [[UIImageView alloc]init]; 
[imageView addSubview:indicator]; 
[indicator startAnimating]; 

    if(imgData == nil) 
{ 
    imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"NoImagenew.png"]]; 
    //[indicator stopAnimating]; 
} 
else{ 
    imageView = [[UIImageView alloc] initWithImage:imgData]; 
    // [indicator stopAnimating]; 
} 
//imageView.contentMode = UIViewContentModeScaleAspectFit; 
//imageView.autoresizingMask = (UIViewAutoresizingFlexibleWidth || UIViewAutoresizingFlexibleHeight); 
//[imageView sizeToFit]; 
[self addSubview:imageView]; 

imageView.frame = self.bounds; 
//imageView.frame = CGRectMake(0, 0, 85, 94); 
[imageView setNeedsLayout]; 
[self setNeedsLayout]; 
//[data release]; 
data=nil; 
} 

// cellForRowAtIndexPath method. 

asyncImageView = [[AsyncImageView alloc]initWithFrame:CGRectMake(1, 3, 85, 54)]; 
[asyncImageView loadImageFromURL:[NSURL URLWithString:imageUrlString]]; 
[cell.contentView addSubview:asyncImageView]; 

Этот код показывает индикатор активности, но после загрузки изображения после этого не загружается изображение. Пожалуйста, руководство для выше.

+0

вы просто остановить индикатор активности, где вы извлекая его из вида? – amar

+0

[imageView addSubview: индикатор]; положите это перед получением данных – Rajneesh071

+0

@ Rajneesh071 обновил код, пожалуйста, проверьте. –

ответ

0

В настоящее время вы добавляете индикатор активности при загрузке изображения.

Вот простая идея, надеюсь, что вы можете реализовать это в коде

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    // This method is called when your connection receives a response 
    // add your activity indication here and start animating 
} 


- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    // This method is called when your image is downloaded. 
    // remove your activity indicator or stop animating here 
} 
+0

Спасибо за идею. –

0

Я думаю, что у используют asynimageview classs, в том, что по умолчанию вы получите загрузчик в самой клетке.

0

Надеюсь, что вы скачали AsyncImageView от https://github.com/nicklockwood/AsyncImageView. По умолчанию у него есть функция, показывающая индикатор активности. Вам просто не нужно добавлять или удалять код самостоятельно, чтобы эта функция работала. Просто позвоните loadImageWithURL.

1

Вы должны создать объект AsyncImageView вместо UIImageView, то он будет автоматически добавить индикатор на ваш взгляд

AsyncImageView *imageView = [[AsyncImageView alloc] initWithFrame:CGRectMake(1, 3, 85, 54)]; 
[cell addSubview:imageView]; 


//cancel loading previous image for cell 
    [[AsyncImageLoader sharedLoader] cancelLoadingImagesForTarget:imageView]; 

    //load the image 
    imageView.imageURL = [imageURLs objectAtIndex:indexPath.row]; 

Вот example этого

0

AysncImageView уже есть загрузчик.

Вы не увидите его, если ваш фон черный, так как он загружает индикатор активности по умолчанию.

Итак, просто установите объект activityIndicatorStyle для вашего объекта AsyncImageView на основе вашего фона.

В моем случае, мой фон был черным, поэтому я использовал следующий код:

asyncImgView.activityIndicatorStyle = UIActivityIndicatorViewStyleWhite; 
Смежные вопросы