covelline / LINUIImageViewAsyncAdditions

( ˘ω˘) Async ( ˘ω˘) Rely on SDWebImage ( ˘ω˘) 誰か英語教えてください

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

LINUIImageViewAsyncAdditions

( ˘ω˘) Async ( ˘ω˘) Rely on SDWebImage ( ˘ω˘)

This is draft... ( ˘ω˘)

But we have used in feather for Twitter. ( ˘ω˘)

SDWebImage can asynchronous "image" download.

LINUIImageViewAsyncAdditions can asynchronous "image" download and asynchronous "URL" resolve.

e.g.

In order to getting Flickr image URL from Flickr short URL, We request to Flickr API.

Example

Implementation LINAsyncImageURLProvider

@interface FlickrImageIdentifier : NSObject <LINAsyncImageURLProvider>

- (instancetype)initWithFlickrShortURLString:(NSString*)urlString;

@end
@implementation FlickrImageIdentifier

- (instancetype)initWithFlickrShortURLString:(NSString *)urlString {
  // initialize code
  //e.g. _urlString = urlString;
}

#pragma mark - LINAsyncImageURLProvider

- (void)resolveImageURL:(LINAsyncImageResolvedURLDidGetBlock)didGetImageURLBlock {

  NSURL *URL = [NSURL URLWithString:self.urlString];

  // Asynchronous resolve Flickr image URL. using FlickrKit.

  FKFlickrPhotosGetSizes *getSizes = [FKFlickrPhotosGetSizes.alloc init];
  getSizes.photo_id = self.urlString.tb_flickrPhotoID;

  FlickrKit *fk = FlickrKit.sharedFlickrKit;
  [fk call:getSizes completion:^(NSDictionary *response, NSError *error) {

    if (error) {
      return didGetImageURLBlock(nil, URL);
    }

    NSArray *sizes = [[response valueForKeyPath:@"sizes.size"] asArray];
    if (sizes.count == 0) {
      return didGetImageURLBlock(nil, URL);
    }

    NSURL *imageURL = [self bestSizeURLWith:sizes];
    didGetImageURLBlock(imageURL, URL);
  }];
}

// Caching Resolved URL

- (BOOL)shouldCacheResolvedURL {
    return YES;
}

- (NSString *)resolvedURLCacheKey {
    return self.urlString;
}

@end

Load Image

@implementation FlickrImageView

- (void)setFlickrShortURL:(NSString *)urlString {

  FlickrImageIdentifier *identifier = [FlickrImageIdentifier.alloc initWithFlickrShortURLString:urlString];

  // async resolve url and async download image
  [_imageView lin_setImageProvider:identifier completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
    // hogehoge
  }];
}

@end

Processed Image Feature

Use LINAsyncProcessedImageURLProvider.

@interface CircleImageIdentifier : NSObject <LINAsyncProcessedImageURLProvider>

- (instancetype)initWithURLString:(NSString *)urlString;

@end
@implementation CircleImageIdentifier

- (instancetype)initWithURLString:(NSString *)urlString {
  // initialize code
}

#pragma mark - LINAsyncImageURLProvider

// - resolve url code

#pragma mark - AsyncProcessedImageURLProvider

- (void)processImageWithOriginalImage:(UIImage *)originalImage
                  forResolvedImageURL:(NSURL *)resolvedImageURL
                    didProcessedBlock:(void (^)(UIImage *))didProcessedBlock {

    // do not UI Thread.
    dispatch_async(self.class.processQueue, ^{

        // Processing to round the image...

        didProcessedBlock(processedImage);
    });
}

// Caching Processed Image

- (BOOL)shouldCacheProcessedImage {
    return YES;
}

- (NSString *)processedImageCacheKey {
  // uniq key
  return _processedImageKey;
}

TODO

  • Add test
  • Add cocoapods

About

( ˘ω˘) Async ( ˘ω˘) Rely on SDWebImage ( ˘ω˘) 誰か英語教えてください

License:MIT License


Languages

Language:Objective-C 99.2%Language:Ruby 0.8%