|
@@ -146,6 +146,7 @@ static dispatch_queue_t YYTextAsyncLayerGetReleaseQueue() {
|
|
|
CGSize size = self.bounds.size;
|
|
|
BOOL opaque = self.opaque;
|
|
|
CGFloat scale = self.contentsScale;
|
|
|
+ CGColorRef backgroundColor = (opaque && self.backgroundColor) ? CGColorRetain(self.backgroundColor) : NULL;
|
|
|
if (size.width < 1 || size.height < 1) {
|
|
|
CGImageRef image = (__bridge_retained CGImageRef)(self.contents);
|
|
|
self.contents = nil;
|
|
@@ -155,13 +156,32 @@ static dispatch_queue_t YYTextAsyncLayerGetReleaseQueue() {
|
|
|
});
|
|
|
}
|
|
|
if (task.didDisplay) task.didDisplay(self, YES);
|
|
|
+ CGColorRelease(backgroundColor);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
dispatch_async(YYTextAsyncLayerGetDisplayQueue(), ^{
|
|
|
- if (isCancelled()) return;
|
|
|
+ if (isCancelled()) {
|
|
|
+ CGColorRelease(backgroundColor);
|
|
|
+ return;
|
|
|
+ }
|
|
|
UIGraphicsBeginImageContextWithOptions(size, opaque, scale);
|
|
|
CGContextRef context = UIGraphicsGetCurrentContext();
|
|
|
+ if (opaque) {
|
|
|
+ CGContextSaveGState(context); {
|
|
|
+ if (!backgroundColor || CGColorGetAlpha(backgroundColor) < 1) {
|
|
|
+ CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
|
|
|
+ CGContextAddRect(context, CGRectMake(0, 0, size.width * scale, size.height * scale));
|
|
|
+ CGContextFillPath(context);
|
|
|
+ }
|
|
|
+ if (backgroundColor) {
|
|
|
+ CGContextSetFillColorWithColor(context, backgroundColor);
|
|
|
+ CGContextAddRect(context, CGRectMake(0, 0, size.width * scale, size.height * scale));
|
|
|
+ CGContextFillPath(context);
|
|
|
+ }
|
|
|
+ } CGContextRestoreGState(context);
|
|
|
+ CGColorRelease(backgroundColor);
|
|
|
+ }
|
|
|
task.display(context, size, isCancelled);
|
|
|
if (isCancelled()) {
|
|
|
UIGraphicsEndImageContext();
|
|
@@ -192,6 +212,23 @@ static dispatch_queue_t YYTextAsyncLayerGetReleaseQueue() {
|
|
|
if (task.willDisplay) task.willDisplay(self);
|
|
|
UIGraphicsBeginImageContextWithOptions(self.bounds.size, self.opaque, self.contentsScale);
|
|
|
CGContextRef context = UIGraphicsGetCurrentContext();
|
|
|
+ if (self.opaque) {
|
|
|
+ CGSize size = self.bounds.size;
|
|
|
+ size.width *= self.contentsScale;
|
|
|
+ size.height *= self.contentsScale;
|
|
|
+ CGContextSaveGState(context); {
|
|
|
+ if (!self.backgroundColor || CGColorGetAlpha(self.backgroundColor) < 1) {
|
|
|
+ CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
|
|
|
+ CGContextAddRect(context, CGRectMake(0, 0, size.width, size.height));
|
|
|
+ CGContextFillPath(context);
|
|
|
+ }
|
|
|
+ if (self.backgroundColor) {
|
|
|
+ CGContextSetFillColorWithColor(context, self.backgroundColor);
|
|
|
+ CGContextAddRect(context, CGRectMake(0, 0, size.width, size.height));
|
|
|
+ CGContextFillPath(context);
|
|
|
+ }
|
|
|
+ } CGContextRestoreGState(context);
|
|
|
+ }
|
|
|
task.display(context, self.bounds.size, ^{return NO;});
|
|
|
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
|
|
|
UIGraphicsEndImageContext();
|