• 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
  • 相关阅读:
    模型压缩与量化
    基于springboot的健身管理系统
    手把手教会将 Windows 窗体桌面应用从.NET Framework迁移到 .NET SDK/.NET 6 格式
    【ACM学习】【STL】关联容器的分类
    宝贝详情页制作的7个步骤,一看就懂
    通讯录(C语言版)
    程序员朴实无华的一天都做些什么?
    光流法( Optical Flow Method)
    供应链 | 顶会CIKM论文精读:面向大规模三维装箱问题的数据驱动树形搜索算法
    基于SSH的网上拍卖系统的设计与实现(JavaWeb的拍卖商城系统)
  • 原文地址:https://blog.csdn.net/weixin_42050662/article/details/134524136