在iOS17上,YYText会报以下错误:

UIGraphicsBeginImageContext() failed to allocate CGBitampContext: size={0, 0}, scale=3.000000, bitmapInfo=0x2002. Use UIGraphicsImageRenderer to avoid this assert.

解决方法如下: 在YYTextAsyncLayer.m文件中,_displayAsync:(BOOL)async 方法中。 原代码:

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();

self.contents = (__bridge id)(image.CGImage);

修复后的代码:

UIGraphicsImageRendererFormat *format = [[UIGraphicsImageRendererFormat alloc] init];

format.opaque = self.opaque;

format.scale = self.contentsScale;

UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:self.bounds.size format:format];

UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) {

CGContextRef context = rendererContext.CGContext;

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;});

}];

self.contents = (__bridge id)(image.CGImage);

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: