2013-07-29 5 views
4

Voici comment j'utilise avec succès SDWebImageManager pour télécharger les images:iOS SDWebImage Cross Fade Effect UITableViewCell

- (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]; 
} 

Comment puis-je modifier pour avoir un effet de fondu enchaîné? Cross Fade Effect est celui qui fait que l'image montre une transition lente, tout comme l'application TechCrunch iOS. Merci!

MISE À JOUR: Si je peux faire autre chose pour avoir un effet de fondu enchaîné (autre que SDWebImage) dans la cellule uitableview que vous pouvez l'écrire dans la réponse.

MISE À JOUR: J'ai reçu quelques réponses après ma dernière mise à jour et je suis en mesure de résoudre partiellement le problème. En utilisant transitionWithView comme dans la réponse ci-dessous, il fonctionne et se fane comme je veux MAIS puisque j'utilise un contrôleur tableivew qui charge plus d'entrées lorsqu'il touche le bas, il rafraîchit toutes les cellules une fois avant que le nouveau bloc d'entrées ne soit chargé, comment puis-je empêcher ce comportement?

Répondre

4

On dirait que vous utilisez le SDWebImageManager dans un fichier différent qui n'est pas nécessairement la classe UITableViewController. Vous pouvez utiliser transitionWithView mais pas directement avec SDWebImageManager si c'est dans une classe différente.

Mais, selon vous, la table classe contrôleur où vous utilisez cellForRowAtIndexPath et reliant l'image avec le imageView de UITableViewCell, vous pouvez en utilisant transitionView comme ci-dessous:

[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 
         }]; 

Hope this helps!

-1

s'il vous plaît se référer à la définition de l'interface:

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

il y a plusieurs valeur pour SDImageOptions et je pense que celui-ci est ce que vous attendiez:

/** 
* 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 
1

Vous pouvez utiliser la méthode UIView transitionWithView:duration:options:animations:completion: pour Fondu l'image vue de l'ancienne image à la nouvelle comme ceci:

[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 
       }]; 

Il suffit d'utiliser ce code dans votre bloc completed où vous auriez normalement mis l'image à imageView