|
@@ -149,11 +149,14 @@ static int _YYWebImageHighlightedSetterKey;
|
|
});
|
|
});
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ __block int32_t newSentinel = 0;
|
|
|
|
+ __weak typeof(setter) weakSetter = nil;
|
|
YYWebImageCompletionBlock _completion = ^(UIImage *image, NSURL *url, YYWebImageFromType from, YYWebImageStage stage, NSError *error) {
|
|
YYWebImageCompletionBlock _completion = ^(UIImage *image, NSURL *url, YYWebImageFromType from, YYWebImageStage stage, NSError *error) {
|
|
__strong typeof(_self) self = _self;
|
|
__strong typeof(_self) self = _self;
|
|
BOOL setImage = (stage == YYWebImageStageFinished || stage == YYWebImageStageProgress) && image && !(options & YYWebImageOptionAvoidSetImage);
|
|
BOOL setImage = (stage == YYWebImageStageFinished || stage == YYWebImageStageProgress) && image && !(options & YYWebImageOptionAvoidSetImage);
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
- if (setImage && self) {
|
|
|
|
|
|
+ BOOL sentinelChanged = weakSetter && weakSetter.sentinel != newSentinel;
|
|
|
|
+ if (setImage && self && !sentinelChanged) {
|
|
BOOL showFade = ((options & YYWebImageOptionSetImageWithFadeAnimation) && !self.highlighted);
|
|
BOOL showFade = ((options & YYWebImageOptionSetImageWithFadeAnimation) && !self.highlighted);
|
|
if (showFade) {
|
|
if (showFade) {
|
|
CATransition *transition = [CATransition animation];
|
|
CATransition *transition = [CATransition animation];
|
|
@@ -164,11 +167,18 @@ static int _YYWebImageHighlightedSetterKey;
|
|
}
|
|
}
|
|
self.image = image;
|
|
self.image = image;
|
|
}
|
|
}
|
|
- if (completion) completion(image, url, from, stage, error);
|
|
|
|
|
|
+ if (completion) {
|
|
|
|
+ if (sentinelChanged) {
|
|
|
|
+ completion(nil, url, YYWebImageFromNone, YYWebImageStageCancelled, nil);
|
|
|
|
+ } else {
|
|
|
|
+ completion(image, url, from, stage, error);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
});
|
|
});
|
|
};
|
|
};
|
|
|
|
|
|
- [setter setOperationWithSentinel:sentinel url:imageURL options:options manager:manager progress:_progress transform:transform completion:_completion];
|
|
|
|
|
|
+ newSentinel = [setter setOperationWithSentinel:sentinel url:imageURL options:options manager:manager progress:_progress transform:transform completion:_completion];
|
|
|
|
+ weakSetter = setter;
|
|
});
|
|
});
|
|
});
|
|
});
|
|
}
|
|
}
|
|
@@ -303,12 +313,15 @@ static int _YYWebImageHighlightedSetterKey;
|
|
});
|
|
});
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ __block int32_t newSentinel = 0;
|
|
|
|
+ __weak typeof(setter) weakSetter = nil;
|
|
YYWebImageCompletionBlock _completion = ^(UIImage *image, NSURL *url, YYWebImageFromType from, YYWebImageStage stage, NSError *error) {
|
|
YYWebImageCompletionBlock _completion = ^(UIImage *image, NSURL *url, YYWebImageFromType from, YYWebImageStage stage, NSError *error) {
|
|
__strong typeof(_self) self = _self;
|
|
__strong typeof(_self) self = _self;
|
|
BOOL setImage = (stage == YYWebImageStageFinished || stage == YYWebImageStageProgress) && image && !(options & YYWebImageOptionAvoidSetImage);
|
|
BOOL setImage = (stage == YYWebImageStageFinished || stage == YYWebImageStageProgress) && image && !(options & YYWebImageOptionAvoidSetImage);
|
|
BOOL showFade = ((options & YYWebImageOptionSetImageWithFadeAnimation) && self.highlighted);
|
|
BOOL showFade = ((options & YYWebImageOptionSetImageWithFadeAnimation) && self.highlighted);
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
- if (setImage && self) {
|
|
|
|
|
|
+ BOOL sentinelChanged = weakSetter && weakSetter.sentinel != newSentinel;
|
|
|
|
+ if (setImage && self && !sentinelChanged) {
|
|
if (showFade) {
|
|
if (showFade) {
|
|
CATransition *transition = [CATransition animation];
|
|
CATransition *transition = [CATransition animation];
|
|
transition.duration = stage == YYWebImageStageFinished ? _YYWebImageFadeTime : _YYWebImageProgressiveFadeTime;
|
|
transition.duration = stage == YYWebImageStageFinished ? _YYWebImageFadeTime : _YYWebImageProgressiveFadeTime;
|
|
@@ -318,11 +331,18 @@ static int _YYWebImageHighlightedSetterKey;
|
|
}
|
|
}
|
|
self.highlightedImage = image;
|
|
self.highlightedImage = image;
|
|
}
|
|
}
|
|
- if (completion) completion(image, url, from, stage, error);
|
|
|
|
|
|
+ if (completion) {
|
|
|
|
+ if (sentinelChanged) {
|
|
|
|
+ completion(nil, url, YYWebImageFromNone, YYWebImageStageCancelled, nil);
|
|
|
|
+ } else {
|
|
|
|
+ completion(image, url, from, stage, error);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
});
|
|
});
|
|
};
|
|
};
|
|
|
|
|
|
- [setter setOperationWithSentinel:sentinel url:imageURL options:options manager:manager progress:_progress transform:transform completion:_completion];
|
|
|
|
|
|
+ newSentinel = [setter setOperationWithSentinel:sentinel url:imageURL options:options manager:manager progress:_progress transform:transform completion:_completion];
|
|
|
|
+ weakSetter = setter;
|
|
});
|
|
});
|
|
});
|
|
});
|
|
}
|
|
}
|