0


iOS 17.0 YYText UIGraphicsBeginImageContextWithOptions 崩溃处理

在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);
标签: ios iOS17 YYText

本文转载自: https://blog.csdn.net/RookieJin/article/details/136735085
版权归原作者 RookieJin 所有, 如有侵权,请联系我们删除。

“iOS 17.0 YYText UIGraphicsBeginImageContextWithOptions 崩溃处理”的评论:

还没有评论