Skip to content

Instantly share code, notes, and snippets.

@dblandin
Created August 23, 2013 22:49
Show Gist options
  • Save dblandin/6324744 to your computer and use it in GitHub Desktop.
Save dblandin/6324744 to your computer and use it in GitHub Desktop.
UIImageView with progress blocks
class UIImageView
def af_imageRequestOperation
@af_imageRequestOperation
end
def af_imageRequestOperation=(operation)
@af_imageRequestOperation = operation
end
def set_image_with_url(url)
set_image_with_url(url, placeholder: nil)
end
def set_image_with_url(url, placeholder: placeholder)
request = NSMutableURLRequest.requestWithURL(url)
request.addValue('image/*', forHTTPHeaderField: 'Accept')
set_image_with_url_request(request, placeholder: placeholder, success: nil, failure: nil)
end
def set_image_with_url_request(request, placeholder: placeholder, success: success_callback, failure: failure_callback, progress: progress_callback)
cancelImageRequestOperation
cached_image = self.class.af_sharedImageCache.cachedImageForRequest(request)
if cached_image
self.af_imageRequestOperation = nil
if success_callback
success_callback.call(nil, nil, cached_image)
else
self.image = cached_image
end
else
if placeholder
self.image = placeholder
end
end
operation = AFImageRequestOperation.alloc.initWithRequest(request)
operation.setCompletionBlockWithSuccess(
lambda { |operation, response|
if request == af_imageRequestOperation.request
self.af_imageRequestOperation = nil
end
if success_callback
success_callback.call(operation.request, operation.response, response)
end
self.class.af_sharedImageCache.cacheImage(response, forRequest: request)
}, failure: lambda { |operation, error|
if request == self.af_imageRequestOperation.request
self.af_imageRequestOperation = nil
end
if failure_callback
failure_callback.call(operation.request, operation.response, error)
end
})
if progress_callback
operation.setDownloadProgressBlock(progress_callback)
end
self.af_imageRequestOperation = operation
self.class.af_sharedImageRequestOperationQueue.addOperation(af_imageRequestOperation)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment