Refactor the cancel logic
This commit is contained in:
parent
f6fdaeb6ae
commit
4c18545dbc
|
@ -193,6 +193,12 @@
|
||||||
A18A6CC8172DC28500419892 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = A18A6CC5172DC28500419892 /* UIImage+GIF.h */; };
|
A18A6CC8172DC28500419892 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = A18A6CC5172DC28500419892 /* UIImage+GIF.h */; };
|
||||||
A18A6CC9172DC28500419892 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = A18A6CC6172DC28500419892 /* UIImage+GIF.m */; };
|
A18A6CC9172DC28500419892 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = A18A6CC6172DC28500419892 /* UIImage+GIF.m */; };
|
||||||
A18A6CCA172DC28500419892 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = A18A6CC6172DC28500419892 /* UIImage+GIF.m */; };
|
A18A6CCA172DC28500419892 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = A18A6CC6172DC28500419892 /* UIImage+GIF.m */; };
|
||||||
|
AB615303192DA24600A2D8E9 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = AB615301192DA24600A2D8E9 /* UIView+WebCacheOperation.h */; };
|
||||||
|
AB615304192DA24600A2D8E9 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = AB615301192DA24600A2D8E9 /* UIView+WebCacheOperation.h */; };
|
||||||
|
AB615305192DA24600A2D8E9 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = AB615301192DA24600A2D8E9 /* UIView+WebCacheOperation.h */; };
|
||||||
|
AB615306192DA24600A2D8E9 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = AB615302192DA24600A2D8E9 /* UIView+WebCacheOperation.m */; };
|
||||||
|
AB615307192DA24600A2D8E9 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = AB615302192DA24600A2D8E9 /* UIView+WebCacheOperation.m */; };
|
||||||
|
AB615308192DA24600A2D8E9 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = AB615302192DA24600A2D8E9 /* UIView+WebCacheOperation.m */; };
|
||||||
ABBE71A718C43B4D00B75E91 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = ABBE71A518C43B4D00B75E91 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
ABBE71A718C43B4D00B75E91 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = ABBE71A518C43B4D00B75E91 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
ABBE71A818C43B4D00B75E91 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = ABBE71A618C43B4D00B75E91 /* UIImageView+HighlightedWebCache.m */; };
|
ABBE71A818C43B4D00B75E91 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = ABBE71A618C43B4D00B75E91 /* UIImageView+HighlightedWebCache.m */; };
|
||||||
ABBE71A918C43B5800B75E91 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = ABBE71A518C43B4D00B75E91 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
ABBE71A918C43B5800B75E91 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = ABBE71A518C43B4D00B75E91 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
|
@ -290,6 +296,8 @@
|
||||||
5DA509F3187B68E7002FEB5C /* random.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = random.h; path = Vendors/libwebp/src/utils/random.h; sourceTree = "<group>"; };
|
5DA509F3187B68E7002FEB5C /* random.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = random.h; path = Vendors/libwebp/src/utils/random.h; sourceTree = "<group>"; };
|
||||||
A18A6CC5172DC28500419892 /* UIImage+GIF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+GIF.h"; sourceTree = "<group>"; };
|
A18A6CC5172DC28500419892 /* UIImage+GIF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+GIF.h"; sourceTree = "<group>"; };
|
||||||
A18A6CC6172DC28500419892 /* UIImage+GIF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+GIF.m"; sourceTree = "<group>"; };
|
A18A6CC6172DC28500419892 /* UIImage+GIF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+GIF.m"; sourceTree = "<group>"; };
|
||||||
|
AB615301192DA24600A2D8E9 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+WebCacheOperation.h"; sourceTree = "<group>"; };
|
||||||
|
AB615302192DA24600A2D8E9 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+WebCacheOperation.m"; sourceTree = "<group>"; };
|
||||||
ABBE71A518C43B4D00B75E91 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+HighlightedWebCache.h"; sourceTree = "<group>"; };
|
ABBE71A518C43B4D00B75E91 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImageView+HighlightedWebCache.h"; sourceTree = "<group>"; };
|
||||||
ABBE71A618C43B4D00B75E91 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+HighlightedWebCache.m"; sourceTree = "<group>"; };
|
ABBE71A618C43B4D00B75E91 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImageView+HighlightedWebCache.m"; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
@ -392,6 +400,8 @@
|
||||||
53922D94148C56230056699D /* UIButton+WebCache.m */,
|
53922D94148C56230056699D /* UIButton+WebCache.m */,
|
||||||
53922D95148C56230056699D /* UIImageView+WebCache.h */,
|
53922D95148C56230056699D /* UIImageView+WebCache.h */,
|
||||||
53922D96148C56230056699D /* UIImageView+WebCache.m */,
|
53922D96148C56230056699D /* UIImageView+WebCache.m */,
|
||||||
|
AB615301192DA24600A2D8E9 /* UIView+WebCacheOperation.h */,
|
||||||
|
AB615302192DA24600A2D8E9 /* UIView+WebCacheOperation.m */,
|
||||||
);
|
);
|
||||||
name = Categories;
|
name = Categories;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -532,6 +542,7 @@
|
||||||
53EDFCB317625CD800698166 /* quant_levels_dec.h in Headers */,
|
53EDFCB317625CD800698166 /* quant_levels_dec.h in Headers */,
|
||||||
53EDFCBA17625D1900698166 /* dsp.h in Headers */,
|
53EDFCBA17625D1900698166 /* dsp.h in Headers */,
|
||||||
53EDFCC617625DB200698166 /* bit_reader.h in Headers */,
|
53EDFCC617625DB200698166 /* bit_reader.h in Headers */,
|
||||||
|
AB615305192DA24600A2D8E9 /* UIView+WebCacheOperation.h in Headers */,
|
||||||
53EDFCCC17625DD700698166 /* color_cache.h in Headers */,
|
53EDFCCC17625DD700698166 /* color_cache.h in Headers */,
|
||||||
53EDFCD217625DFA00698166 /* lossless.h in Headers */,
|
53EDFCD217625DFA00698166 /* lossless.h in Headers */,
|
||||||
53EDFCE417625EB100698166 /* yuv.h in Headers */,
|
53EDFCE417625EB100698166 /* yuv.h in Headers */,
|
||||||
|
@ -559,6 +570,7 @@
|
||||||
530E49E816464C25002868E7 /* SDWebImageOperation.h in Headers */,
|
530E49E816464C25002868E7 /* SDWebImageOperation.h in Headers */,
|
||||||
530E49EA16464C7C002868E7 /* SDWebImageDownloaderOperation.h in Headers */,
|
530E49EA16464C7C002868E7 /* SDWebImageDownloaderOperation.h in Headers */,
|
||||||
ABBE71A718C43B4D00B75E91 /* UIImageView+HighlightedWebCache.h in Headers */,
|
ABBE71A718C43B4D00B75E91 /* UIImageView+HighlightedWebCache.h in Headers */,
|
||||||
|
AB615303192DA24600A2D8E9 /* UIView+WebCacheOperation.h in Headers */,
|
||||||
A18A6CC7172DC28500419892 /* UIImage+GIF.h in Headers */,
|
A18A6CC7172DC28500419892 /* UIImage+GIF.h in Headers */,
|
||||||
53EDFB8A17623F7C00698166 /* UIImage+MultiFormat.h in Headers */,
|
53EDFB8A17623F7C00698166 /* UIImage+MultiFormat.h in Headers */,
|
||||||
);
|
);
|
||||||
|
@ -591,6 +603,7 @@
|
||||||
537D95B417ECC1FE0097C263 /* bit_reader.h in Headers */,
|
537D95B417ECC1FE0097C263 /* bit_reader.h in Headers */,
|
||||||
537D95B517ECC1FE0097C263 /* color_cache.h in Headers */,
|
537D95B517ECC1FE0097C263 /* color_cache.h in Headers */,
|
||||||
537D95B617ECC1FE0097C263 /* lossless.h in Headers */,
|
537D95B617ECC1FE0097C263 /* lossless.h in Headers */,
|
||||||
|
AB615304192DA24600A2D8E9 /* UIView+WebCacheOperation.h in Headers */,
|
||||||
537D95B717ECC1FE0097C263 /* alpha_processing.h in Headers */,
|
537D95B717ECC1FE0097C263 /* alpha_processing.h in Headers */,
|
||||||
5DA509F5187B68E7002FEB5C /* random.h in Headers */,
|
5DA509F5187B68E7002FEB5C /* random.h in Headers */,
|
||||||
537D95B817ECC1FE0097C263 /* yuv.h in Headers */,
|
537D95B817ECC1FE0097C263 /* yuv.h in Headers */,
|
||||||
|
@ -749,6 +762,7 @@
|
||||||
A18A6CCA172DC28500419892 /* UIImage+GIF.m in Sources */,
|
A18A6CCA172DC28500419892 /* UIImage+GIF.m in Sources */,
|
||||||
53EDFB8D17623F7C00698166 /* UIImage+MultiFormat.m in Sources */,
|
53EDFB8D17623F7C00698166 /* UIImage+MultiFormat.m in Sources */,
|
||||||
53EDFB961762547D00698166 /* UIImage+WebP.m in Sources */,
|
53EDFB961762547D00698166 /* UIImage+WebP.m in Sources */,
|
||||||
|
AB615308192DA24600A2D8E9 /* UIView+WebCacheOperation.m in Sources */,
|
||||||
ABBE71AC18C43B6000B75E91 /* UIImageView+HighlightedWebCache.m in Sources */,
|
ABBE71AC18C43B6000B75E91 /* UIImageView+HighlightedWebCache.m in Sources */,
|
||||||
53EDFC9517625BE300698166 /* webp.c in Sources */,
|
53EDFC9517625BE300698166 /* webp.c in Sources */,
|
||||||
53EDFC9D17625C1100698166 /* vp8l.c in Sources */,
|
53EDFC9D17625C1100698166 /* vp8l.c in Sources */,
|
||||||
|
@ -794,6 +808,7 @@
|
||||||
530E49EC16464C84002868E7 /* SDWebImageDownloaderOperation.m in Sources */,
|
530E49EC16464C84002868E7 /* SDWebImageDownloaderOperation.m in Sources */,
|
||||||
53406750167780C40042B59E /* SDWebImageCompat.m in Sources */,
|
53406750167780C40042B59E /* SDWebImageCompat.m in Sources */,
|
||||||
A18A6CC9172DC28500419892 /* UIImage+GIF.m in Sources */,
|
A18A6CC9172DC28500419892 /* UIImage+GIF.m in Sources */,
|
||||||
|
AB615306192DA24600A2D8E9 /* UIView+WebCacheOperation.m in Sources */,
|
||||||
5D5B9145188EE8DD006D06BD /* NSData+ImageContentType.m in Sources */,
|
5D5B9145188EE8DD006D06BD /* NSData+ImageContentType.m in Sources */,
|
||||||
53EDFB8C17623F7C00698166 /* UIImage+MultiFormat.m in Sources */,
|
53EDFB8C17623F7C00698166 /* UIImage+MultiFormat.m in Sources */,
|
||||||
ABBE71A818C43B4D00B75E91 /* UIImageView+HighlightedWebCache.m in Sources */,
|
ABBE71A818C43B4D00B75E91 /* UIImageView+HighlightedWebCache.m in Sources */,
|
||||||
|
@ -805,6 +820,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
537D957517ECC1FE0097C263 /* SDImageCache.m in Sources */,
|
537D957517ECC1FE0097C263 /* SDImageCache.m in Sources */,
|
||||||
|
AB615307192DA24600A2D8E9 /* UIView+WebCacheOperation.m in Sources */,
|
||||||
537D957617ECC1FE0097C263 /* SDWebImageDecoder.m in Sources */,
|
537D957617ECC1FE0097C263 /* SDWebImageDecoder.m in Sources */,
|
||||||
537D957717ECC1FE0097C263 /* SDWebImageDownloader.m in Sources */,
|
537D957717ECC1FE0097C263 /* SDWebImageDownloader.m in Sources */,
|
||||||
537D957817ECC1FE0097C263 /* SDWebImageManager.m in Sources */,
|
537D957817ECC1FE0097C263 /* SDWebImageManager.m in Sources */,
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
|
|
||||||
#import "MKAnnotationView+WebCache.h"
|
#import "MKAnnotationView+WebCache.h"
|
||||||
#import "objc/runtime.h"
|
#import "objc/runtime.h"
|
||||||
|
#import "UIView+WebCacheOperation.h"
|
||||||
|
|
||||||
static char imageURLKey;
|
static char imageURLKey;
|
||||||
static char operationKey;
|
|
||||||
|
|
||||||
@implementation MKAnnotationView (WebCache)
|
@implementation MKAnnotationView (WebCache)
|
||||||
|
|
||||||
|
@ -61,17 +61,12 @@ static char operationKey;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}];
|
}];
|
||||||
objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
[self setImageLoadOperation:operation forKey:@"MKAnnotationViewImage"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)cancelCurrentImageLoad {
|
- (void)cancelCurrentImageLoad {
|
||||||
// Cancel in progress downloader from queue
|
[self cancelImageLoadOperationWithKey:@"MKAnnotationViewImage"];
|
||||||
id <SDWebImageOperation> operation = objc_getAssociatedObject(self, &operationKey);
|
|
||||||
if (operation) {
|
|
||||||
[operation cancel];
|
|
||||||
objc_setAssociatedObject(self, &operationKey, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -184,8 +184,13 @@
|
||||||
- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock;
|
- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cancel the current download
|
* Cancel the current image download
|
||||||
*/
|
*/
|
||||||
- (void)cancelCurrentImageLoad;
|
- (void)cancelImageLoadForState:(UIControlState)state;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancel the current backgroundImage download
|
||||||
|
*/
|
||||||
|
- (void)cancelBackgroundImageLoadForState:(UIControlState)state;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
|
|
||||||
#import "UIButton+WebCache.h"
|
#import "UIButton+WebCache.h"
|
||||||
#import "objc/runtime.h"
|
#import "objc/runtime.h"
|
||||||
|
#import "UIView+WebCacheOperation.h"
|
||||||
|
|
||||||
static char imageURLStorageKey;
|
static char imageURLStorageKey;
|
||||||
static char operationKey;
|
|
||||||
|
|
||||||
@implementation UIButton (WebCache)
|
@implementation UIButton (WebCache)
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ static char operationKey;
|
||||||
- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {
|
- (void)setImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {
|
||||||
|
|
||||||
[self setImage:placeholder forState:state];
|
[self setImage:placeholder forState:state];
|
||||||
[self cancelCurrentImageLoad];
|
[self cancelImageLoadForState:state];
|
||||||
|
|
||||||
if (!url) {
|
if (!url) {
|
||||||
[self.imageURLStorage removeObjectForKey:@(state)];
|
[self.imageURLStorage removeObjectForKey:@(state)];
|
||||||
|
@ -79,7 +79,7 @@ static char operationKey;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}];
|
}];
|
||||||
objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
[self setImageLoadOperation:operation forState:state];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state {
|
- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state {
|
||||||
|
@ -103,7 +103,7 @@ static char operationKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {
|
- (void)setBackgroundImageWithURL:(NSURL *)url forState:(UIControlState)state placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock {
|
||||||
[self cancelCurrentImageLoad];
|
[self cancelImageLoadForState:state];
|
||||||
|
|
||||||
[self setBackgroundImage:placeholder forState:state];
|
[self setBackgroundImage:placeholder forState:state];
|
||||||
|
|
||||||
|
@ -122,18 +122,24 @@ static char operationKey;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}];
|
}];
|
||||||
objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
[self setBackgroundImageLoadOperation:operation forState:state];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)setImageLoadOperation:(id<SDWebImageOperation>)operation forState:(UIControlState)state {
|
||||||
|
[self setImageLoadOperation:operation forKey:[NSString stringWithFormat:@"UIButtonImageOperation%@", @(state)]];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)cancelCurrentImageLoad {
|
- (void)cancelImageLoadForState:(UIControlState)state {
|
||||||
// Cancel in progress downloader from queue
|
[self cancelImageLoadOperationWithKey:[NSString stringWithFormat:@"UIButtonImageOperation%@", @(state)]];
|
||||||
id <SDWebImageOperation> operation = objc_getAssociatedObject(self, &operationKey);
|
}
|
||||||
if (operation) {
|
|
||||||
[operation cancel];
|
- (void)setBackgroundImageLoadOperation:(id<SDWebImageOperation>)operation forState:(UIControlState)state {
|
||||||
objc_setAssociatedObject(self, &operationKey, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
[self setImageLoadOperation:operation forKey:[NSString stringWithFormat:@"UIButtonBackgroundImageOperation%@", @(state)]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)cancelBackgroundImageLoadForState:(UIControlState)state {
|
||||||
|
[self cancelImageLoadOperationWithKey:[NSString stringWithFormat:@"UIButtonBackgroundImageOperation%@", @(state)]];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSMutableDictionary *)imageURLStorage;
|
- (NSMutableDictionary *)imageURLStorage;
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#import "UIImageView+WebCache.h"
|
#import "SDWebImageCompat.h"
|
||||||
|
#import "SDWebImageManager.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Integrates SDWebImage async downloading and caching of remote images with UIImageView for highlighted state.
|
* Integrates SDWebImage async downloading and caching of remote images with UIImageView for highlighted state.
|
||||||
|
@ -74,5 +75,9 @@
|
||||||
*/
|
*/
|
||||||
- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock;
|
- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancel the current download
|
||||||
|
*/
|
||||||
|
- (void)cancelCurrentHighlightedImageLoad;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import "UIImageView+HighlightedWebCache.h"
|
#import "UIImageView+HighlightedWebCache.h"
|
||||||
#import "objc/runtime.h"
|
#import "UIView+WebCacheOperation.h"
|
||||||
|
|
||||||
static char operationKey;
|
#define UIImageViewHighlightedWebCacheOperationKey @"highlightedImage"
|
||||||
|
|
||||||
@implementation UIImageView (HighlightedWebCache)
|
@implementation UIImageView (HighlightedWebCache)
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ static char operationKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock {
|
- (void)setHighlightedImageWithURL:(NSURL *)url options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock {
|
||||||
[self cancelCurrentImageLoad];
|
[self cancelCurrentHighlightedImageLoad];
|
||||||
|
|
||||||
if (url) {
|
if (url) {
|
||||||
__weak UIImageView *wself = self;
|
__weak UIImageView *wself = self;
|
||||||
|
@ -52,8 +52,12 @@ static char operationKey;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}];
|
}];
|
||||||
objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
[self setImageLoadOperation:operation forKey:UIImageViewHighlightedWebCacheOperationKey];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)cancelCurrentHighlightedImageLoad {
|
||||||
|
[self cancelImageLoadOperationWithKey:UIImageViewHighlightedWebCacheOperationKey];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -153,6 +153,6 @@
|
||||||
*/
|
*/
|
||||||
- (void)cancelCurrentImageLoad;
|
- (void)cancelCurrentImageLoad;
|
||||||
|
|
||||||
- (void)cancelCurrentArrayLoad;
|
- (void)cancelCurrentAnimationImagesLoad;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -8,10 +8,9 @@
|
||||||
|
|
||||||
#import "UIImageView+WebCache.h"
|
#import "UIImageView+WebCache.h"
|
||||||
#import "objc/runtime.h"
|
#import "objc/runtime.h"
|
||||||
|
#import "UIView+WebCacheOperation.h"
|
||||||
|
|
||||||
static char imageURLKey;
|
static char imageURLKey;
|
||||||
static char operationKey;
|
|
||||||
static char operationArrayKey;
|
|
||||||
|
|
||||||
@implementation UIImageView (WebCache)
|
@implementation UIImageView (WebCache)
|
||||||
|
|
||||||
|
@ -68,7 +67,7 @@ static char operationArrayKey;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}];
|
}];
|
||||||
objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
[self setImageLoadOperation:operation forKey:@"UIImageViewImageLoad"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +78,7 @@ static char operationArrayKey;
|
||||||
|
|
||||||
- (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs
|
- (void)setAnimationImagesWithURLs:(NSArray *)arrayOfURLs
|
||||||
{
|
{
|
||||||
[self cancelCurrentArrayLoad];
|
[self cancelCurrentAnimationImagesLoad];
|
||||||
__weak UIImageView *wself = self;
|
__weak UIImageView *wself = self;
|
||||||
|
|
||||||
NSMutableArray *operationsArray = [[NSMutableArray alloc] init];
|
NSMutableArray *operationsArray = [[NSMutableArray alloc] init];
|
||||||
|
@ -106,27 +105,15 @@ static char operationArrayKey;
|
||||||
[operationsArray addObject:operation];
|
[operationsArray addObject:operation];
|
||||||
}
|
}
|
||||||
|
|
||||||
objc_setAssociatedObject(self, &operationArrayKey, [NSArray arrayWithArray:operationsArray], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
[self setImageLoadOperation:[NSArray arrayWithArray:operationsArray] forKey:@"UIImageViewAnimationImages"];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)cancelCurrentImageLoad {
|
- (void)cancelCurrentImageLoad {
|
||||||
// Cancel in progress downloader from queue
|
[self cancelImageLoadOperationWithKey:@"UIImageViewImageLoad"];
|
||||||
id <SDWebImageOperation> operation = objc_getAssociatedObject(self, &operationKey);
|
|
||||||
if (operation) {
|
|
||||||
[operation cancel];
|
|
||||||
objc_setAssociatedObject(self, &operationKey, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)cancelCurrentArrayLoad {
|
- (void)cancelCurrentAnimationImagesLoad {
|
||||||
// Cancel in progress downloader from queue
|
[self cancelImageLoadOperationWithKey:@"UIImageViewAnimationImages"];
|
||||||
NSArray *operations = objc_getAssociatedObject(self, &operationArrayKey);
|
|
||||||
for (id <SDWebImageOperation> operation in operations) {
|
|
||||||
if (operation) {
|
|
||||||
[operation cancel];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
objc_setAssociatedObject(self, &operationArrayKey, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
//
|
||||||
|
// UIView+WebCacheOperation.h
|
||||||
|
// SDWebImage
|
||||||
|
//
|
||||||
|
// Created by Whirlwind on 14-5-22.
|
||||||
|
// Copyright (c) 2014年 Dailymotion. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "SDWebImageManager.h"
|
||||||
|
|
||||||
|
@interface UIView (WebCacheOperation)
|
||||||
|
|
||||||
|
- (void)setImageLoadOperation:(id)operation forKey:(NSString *)Key;
|
||||||
|
|
||||||
|
- (void)cancelImageLoadOperationWithKey:(NSString *)key;
|
||||||
|
|
||||||
|
- (void)removeImageLoadOperationWithKey:(NSString *)key;
|
||||||
|
|
||||||
|
@end
|
|
@ -0,0 +1,55 @@
|
||||||
|
//
|
||||||
|
// UIView+WebCacheOperation.m
|
||||||
|
// SDWebImage
|
||||||
|
//
|
||||||
|
// Created by Whirlwind on 14-5-22.
|
||||||
|
// Copyright (c) 2014年 Dailymotion. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "UIView+WebCacheOperation.h"
|
||||||
|
#import "objc/runtime.h"
|
||||||
|
|
||||||
|
static char loadOperationKey;
|
||||||
|
|
||||||
|
@implementation UIView (WebCacheOperation)
|
||||||
|
|
||||||
|
- (NSMutableDictionary *)operationDictionary {
|
||||||
|
NSMutableDictionary *operations = objc_getAssociatedObject(self, &loadOperationKey);
|
||||||
|
if (operations) {
|
||||||
|
return operations;
|
||||||
|
}
|
||||||
|
operations = [NSMutableDictionary dictionary];
|
||||||
|
objc_setAssociatedObject(self, &loadOperationKey, operations, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
||||||
|
return operations;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setImageLoadOperation:(id)operation forKey:(NSString *)key {
|
||||||
|
[self cancelImageLoadOperationWithKey:key];
|
||||||
|
NSMutableDictionary *operationDictionary = [self operationDictionary];
|
||||||
|
[operationDictionary setObject:operation forKey:key];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)cancelImageLoadOperationWithKey:(NSString *)key {
|
||||||
|
// Cancel in progress downloader from queue
|
||||||
|
NSMutableDictionary *operationDictionary = [self operationDictionary];
|
||||||
|
id operations = [operationDictionary objectForKey:key];
|
||||||
|
if (operations) {
|
||||||
|
if ([operations isKindOfClass:[NSArray class]]) {
|
||||||
|
for (id <SDWebImageOperation> operation in operations) {
|
||||||
|
if (operation) {
|
||||||
|
[operation cancel];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
[(id<SDWebImageOperation>) operations cancel];
|
||||||
|
}
|
||||||
|
[operationDictionary removeObjectForKey:key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)removeImageLoadOperationWithKey:(NSString *)key {
|
||||||
|
NSMutableDictionary *operationDictionary = [self operationDictionary];
|
||||||
|
[operationDictionary removeObjectForKey:key];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
Loading…
Reference in New Issue