priore

SDWebImage extended with alternate URL

Jun 5th, 2013
614
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //
  2. // SDWebImage author: @Olivier_Poitrey
  3. // source code https://github.com/rs/SDWebImage
  4. //
  5. // Extension author: @DaniloPriore
  6. //
  7. #import "SDWebImageCompat.h"
  8. #import "SDWebImageManager.h"
  9. #import "UIImageView+WebCache.h"
  10. #import "objc/runtime.h"
  11.  
  12. @implementation UIImageView (AlternateURL)
  13.  
  14. static char operationKey;
  15.  
  16. - (void)setImageWithURL:(NSURL *)url
  17.            alternateURL:(NSURL*)alternateURL
  18.        placeholderImage:(UIImage *)placeholder
  19.               completed:(SDWebImageCompletedBlock)completedBlock
  20. {
  21.     [self cancelCurrentImageLoad];
  22.     if (url)
  23.     {
  24.         id<SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadWithURL:url options:SDWebImageRetryFailed progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
  25.                                              {
  26.                                                  if (error) {
  27.                                                      NSLog(@"Image url: %@", [url absoluteString]);
  28.                                                      NSLog(@"Error loading: %@", [error localizedDescription]);
  29.                                                      
  30.                                                      [self setImageWithURL:alternateURL alternateURL:nil placeholderImage:placeholder completed:completedBlock];
  31.                                                  } else {
  32.                                                     if (finished) {
  33.                                                         if (image) {
  34.                                                             self.image = image;
  35.                                                         } else {
  36.                                                             self.image = placeholder;
  37.                                                         }
  38.                                                        
  39.                                                         if (completedBlock) {
  40.                                                             completedBlock(image, error, cacheType);
  41.                                                         }
  42.                                                     }
  43.                                                  }
  44.                                                  
  45.                                              }];
  46.         objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  47.     } else if (alternateURL) {
  48.         [self setImageWithURL:alternateURL alternateURL:nil placeholderImage:placeholder completed:completedBlock];
  49.     } else {
  50.         self.image = placeholder;
  51.    
  52.         if (completedBlock) {
  53.             completedBlock(placeholder, nil, SDImageCacheTypeDisk);
  54.         }
  55.     }
  56. }
  57.  
  58. @end
RAW Paste Data