iOS SDWebImage Эффект перекрестного затухания UITableViewCell

Вот как я успешно использую SDWebImageManager для загрузки изображений:

- (void) downloadThumbnails:(NSURL *) finalUrl
{
    SDWebImageManager *manager = [SDWebImageManager sharedManager];
    [manager downloadWithURL:finalUrl
                     options:0
                    progress:nil
                   completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished) {

                       if (image)
                       {
                           self.thumbnailURL = [finalUrl absoluteString];
                        }
                   }];
}

- (UIImage*)thumbnail {

    if (!self.thumbnailURL) return nil;
    return [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:self.thumbnailURL];
}

Как я могу изменить, чтобы иметь эффект перекрестного затухания? Эффект перекрестного затухания — это тот, который заставляет изображение медленно показывать переход, как в приложении TechCrunch для iOS. Спасибо!

ОБНОВЛЕНИЕ: Если я могу сделать что-нибудь еще, чтобы иметь эффект плавного перехода (кроме SDWebImage) в ячейке uitableview, вы можете написать это в ответе.

ОБНОВЛЕНИЕ: я получил несколько ответов после моего последнего обновления, и я могу частично решить проблему. Используя transitionWithView, как в ответе ниже, он работает и затухает так, как я хочу, НО, поскольку я использую контроллер tableivew, который загружает больше записей, когда он касается дна, он обновляет все ячейки один раз, прежде чем новый блок записей будет загружен, как я могу предотвратить это поведение?


person AJ112    schedule 29.07.2013    source источник


Ответы (3)


Похоже, вы используете SDWebImageManager в другом файле, который обязательно не является классом UITableViewController. Вы можете использовать transitionWithView, но не напрямую с SDWebImageManager, если он находится в другом классе.

Но в вашем классе контроллера табличного представления, где вы используете cellForRowAtIndexPath и связываете изображение с imageView UITableViewCell, вы можете использовать transitionView, как показано ниже:

[UIView transitionWithView:cell.(Your Image View)
                          duration:0.5
                           options:UIViewAnimationOptionTransitionCrossDissolve
                        animations:^{

                            cell.(Your ImageView).image = [(how ever you are calling it)];


                        } completion:^(BOOL finished) {
                            //  Optionally you can do anything after the completion
                        }];

Надеюсь это поможет!

person KC.    schedule 04.08.2013

Вы можете использовать метод UIView transitionWithView:duration:options:animations:completion: для перехода от старого изображения к новому, например:

[UIView transitionWithView:imageView
                  duration:0.4
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^{
                    //  Set the new image
                    //  Since its done in the animation block, the change will be animated
                    imageView.image = newImage;
                } completion:^(BOOL finished) {
                    //  Do whatever when the animation is finished
                }];

Просто используйте этот код в своем блоке completed, где вы обычно устанавливаете изображение в imageView

person Lukas Kukacka    schedule 01.08.2013

пожалуйста, обратитесь к определению интерфейса:

- (id<SDWebImageOperation>)downloadWithURL:(NSURL *)url
                                   options:(SDWebImageOptions)options
                                  progress:(SDWebImageDownloaderProgressBlock)progressBlock
                                 completed:(SDWebImageCompletedWithFinishedBlock)completedBlock;

есть несколько значений для SDImageOptions, и я думаю, что это то, что вы ожидали:

/**
 * This flag enables progressive download, the image is displayed progressively during download as a browser would do.
 * By default, the image is only displayed once completely downloaded.
 */
SDWebImageProgressiveDownload = 1 << 3
person Danyun Liu    schedule 01.08.2013