Как я могу лениво загружать изображения в ячейке UITableView, которые исчезают?

#iphone #objective-c #ios

#iPhone #objective-c #iOS

Вопрос:

Как я могу лениво загружать изображения в ячейку UITableView с эффектом затухания при загрузке изображения?

Ответ №1:

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

Чего это не дает, так это fadeIn эффекта. Но это довольно легко добавить с UIView анимацией.

Итак, чтобы асинхронно загрузить изображение, [imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]];

вот и все..

Чтобы вставить анимацию fadein.

 - (void)fadeInLayer:(CALayer *)l
{
    CABasicAnimation *fadeInAnimate   = [CABasicAnimation animationWithKeyPath:@"opacity"];
    fadeInAnimate.duration            = 0.5;
    fadeInAnimate.repeatCount         = 1;
    fadeInAnimate.autoreverses        = NO;
    fadeInAnimate.fromValue           = [NSNumber numberWithFloat:0.0];
    fadeInAnimate.toValue             = [NSNumber numberWithFloat:1.0];
    fadeInAnimate.removedOnCompletion = YES;
    [l addAnimation:fadeInAnimate forKey:@"animateOpacity"];
    return;
}
 

Чтобы вызвать это — [self fadeInLayer: imageView.layer];

Это должно сработать. Это анимирует ваше изображение от альфа 0 до 1 за 0,5 секунды! Чтобы придать замечательное затухание анимации.

Комментарии:

1. Спасибо, чувак. Можете ли вы сказать мне, как добавить эффект затухания программно? Когда пользователь прокручивает и видит другие UIImageViews, я бы использовал эффект fadeIn для отображения изображений.

Ответ №2:

Вы ссылаетесь на асинхронные изображения. Есть отличная статья, доступная по адресу: http://www.markj.net/iphone-asynchronous-table-image /

В connectionDidFinishLoading просто поместите позже после этого

 UIImageView* imageView = [[[UIImageView alloc] initWithImage:[UIImage imageWithData:data]] autorelease];
//Paste below code here
 

чтобы это исчезло:

 //Paste following here
imageView.alpha = 0.0f;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5f];

imageView.alpha = 1.0f;

[UIView commitAnimations];
 

Комментарии:

1. Спасибо, но мне нужно, чтобы эффект исчез.