• iOS 17.0 YYText 崩溃处理


    YYText,发现在iOS 17上运行会崩溃,触发了系统的断言:
    UIGraphicsBeginImageContext() failed to allocate CGBitampContext: size={382, 0}, scale=3.000000, bitmapInfo=0x2002. Use UIGraphicsImageRenderer to avoid this assert.

    查了下 api,发现UIGraphicsBeginImageContext在iOS 17上已经deprecated了。

    处理办法:YYTextAsyncLayer.m

    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);
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    替换为:

      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);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    高空作业安全带佩戴识别检测系统
    elasticsearch配置参数详解
    智引未来,利尔达成功入选首批“5G应用解决方案供应商推荐名录”名单
    低代码:数智化助力新农业发展
    供应链 | M&SOM论文解读:零售商响应定价能力对供应链韧性的影响
    猿创征文|Docker部署Oracle 19C及最佳实践
    Everything:文件查找工具,一搜即得
    ArcGIS下载在线地图影像上篇(手工版)
    第二十一章 轮播图
    自然人如何在浙江法院网上完成诉讼——具体流程
  • 原文地址:https://blog.csdn.net/weixin_42050662/article/details/134524136