iOS绘图出现的错误

iOS开发技巧合集:提升应用功能与体验 本文介绍了多个iOS开发中的实用技巧,包括添加错误处理、绘制连续图形、修改应用颜色、数据清理、时间限制、周期分析、显示户外时长、定位准确性提示、用户文本输入、优化状态提示、日志换行显示、去除分隔线、添加时间戳、通过邮件发送日志等内容,适用于Swift和SwiftUI开发。 阅读详情
原文地址:点击打开链接

-(void)createCircle
{
CGPoint layerCenter = CGPointMake(CGRectGetWidth(self.view.frame)/2, CGRectGetWidth(self.view.frame)/2);
CAShapeLayer *layer = [CAShapeLayer layer];
layer.frame = self.view.bounds;
layer.lineWidth = 6.0;
layer.strokeColor = [UIColor redColor].CGColor;
layer.fillColor = [UIColor whiteColor].CGColor;
self.path = [UIBezierPath bezierPath];
[self.path addArcWithCenter:layerCenter radius:50 startAngle:0.0 endAngle:M_PI*2 clockwise:YES];
[self.path stroke];
[self.path fill];
layer.path = self.path.CGPath;
[self.view.layer addSublayer:layer];
}

错误日志如下:
Sep  9 16:09:01  Test1[28072] <Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Sep  9 16:09:01  Test1[28072] <Error>: CGContextSetLineWidth: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Sep  9 16:09:01  Test1[28072] <Error>: CGContextSetLineJoin: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Sep  9 16:09:01  Test1[28072] <Error>: CGContextSetLineCap: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Sep  9 16:09:01  Test1[28072] <Error>: CGContextSetMiterLimit: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Sep  9 16:09:01  Test1[28072] <Error>: CGContextSetFlatness: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Sep  9 16:09:01  Test1[28072] <Error>: CGContextAddPath: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Sep  9 16:09:01  Test1[28072] <Error>: CGContextDrawPath: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Sep  9 16:09:01  Test1[28072] <Error>: CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Sep  9 16:09:01  Test1[28072] <Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Sep  9 16:09:01  Test1[28072] <Error>: CGContextSetFlatness: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Sep  9 16:09:01  Test1[28072] <Error>: CGContextAddPath: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Sep  9 16:09:01  Test1[28072] <Error>: CGContextDrawPath: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
Sep  9 16:09:01  Test1[28072] <Error>: CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable

上网查找错误的原因,大部分都说是IOS9适配问题,设置app的状态栏样式的使用使用了旧的方式在IOS9中不兼容。但是我的工程中并没有设置状态栏,并且按照其解决方法更改后也没有解决这个问题。后来看到这篇文章 H含金量 iOS绘图及贝塞尔曲线关键知识 才知道问题所在。

因为绘图不在drawRect:方法中操作导致绘图时没有当前的图形上下文(context)可设置。所以应该在drawRect:中执行图形绘制。修改后代码如下:

-(void)createCircle
{
CGPoint layerCenter = CGPointMake(CGRectGetWidth(self.view.frame)/2, CGRectGetWidth(self.view.frame)/2);
CAShapeLayer *layer = [CAShapeLayer layer];
layer.frame = self.view.bounds;
layer.lineWidth = 6.0;
layer.strokeColor = [UIColor redColor].CGColor;
layer.fillColor = [UIColor whiteColor].CGColor;
self.path = [UIBezierPath bezierPath];
[self.path addArcWithCenter:layerCenter radius:50 startAngle:0.0 endAngle:M_PI*2 clockwise:YES];
//    [self.path stroke];
//    [self.path fill];
layer.path = self.path.CGPath;
[self.view.layer addSublayer:layer];
[self.view setNeedsDisplay];
}
- (void) drawRect:(CGRect)rect {
[self.path stroke];
[self.path fill];
}

或者改成这样:

-(void)createCircle
{
    CGPoint layerCenter = CGPointMake(CGRectGetWidth(self.view.frame)/2, CGRectGetWidth(self.view.frame)/2);
    CAShapeLayer *layer = [CAShapeLayer layer];
    layer.frame = self.view.bounds;
    layer.lineWidth = 6.0;
    layer.strokeColor = [UIColor redColor].CGColor;
    layer.fillColor = [UIColor whiteColor].CGColor;

    self.path = [UIBezierPath bezierPath];
    [self.path addArcWithCenter:layerCenter radius:50 startAngle:0.0 endAngle:M_PI*2 clockwise:YES];
        layer.path = self.path.CGPath;

    UIGraphicsBeginImageContext(self.view.bounds.size);
    [self.path stroke];
    [self.path fill];
    UIGraphicsEndImageContext();

    [self.view.layer addSublayer:layer];
}

这样就不会再出现错误了。其实我这里的path是UIBezierPath,可以直接去掉[self.path stroke];和[self.path fill];这两处的。

【iOS】Quart2D绘图消除线条“锯齿” 前言最近笔者在绘制股票折线图时,发现绘图时,线条的转折处有很明显的的锯齿!于是笔者开启了消除“锯齿”之路。。。锯齿感示例图解决方法在网上尝试了许多方法,例如开启消除锯齿等方法都没有,最后发现因为path的stroke时机调用错了,因此导致绘图产生了锯齿感。接下来看代码:class LineView: UIView { override func draw(_ rect: CGRect) { 阅读详情

相关推荐

深入理解Quartz 2D图形上下文栈:iOS绘图实战Demo

/ 🔹 开启一个离屏位图上下文if (!ctx) {NSLog(@"⚠️ 绘图失败:无法获取上下文");return nil;// 🔹 开始绘制逻辑// 保护原始状态// 1️⃣ 设置圆形裁剪路径// 2️⃣ 绘制头像(自动适应裁剪)// 3️⃣ 绘制金色描边(恢复完整画布后画在外圈)// 4️⃣ 添加等级角标(独立变换)// 🔹 提取结果并关闭上下文// 必须!必须!必须!📌 几个关键点提醒:第二个参数设为NO表示支持透明通道;

weixin_42298164的博客 739

iOS报错 - If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variabl

Error: CGContextSetLineCap: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.解决方法:需要在plist文件中增加如下设置 将这个删除 或者 改为YES (没有这个,就是默认YES)原因

iOSTianNan的博客 1万+

CoreGraphicsFrameworkReference (Core Graphics 框架参考)

苹果官网文档,Core Graphics 是一种基于 C 语言的低层次框架,在处理高品质矢量图形、基于路径的绘图、变换、图像和数据管理等方面,它将是您的得力助手。当然,在 iOS 中创建图形,最简而有效的方法是将预渲染的图像与 UIKit 框架的标准视图和控制配合使用,并让 iOS 完成绘图。毕竟,UIKit 是一种高层次的框架,它同时还提供用于自定绘图的类,包括路径、颜色、图案、渐变、图像、文本和变换,请尽可能地使用它们来代替 Core Graphics。

If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

X-Code 7 报错:  : CGContextTranslateCTM: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable. X-Code 7 的bug,有强迫症的童鞋不要纠结了. 这是apple的官方bu

soindy 8112

富斯遥控器-ros机器人控制

富斯遥控器-ros机器人手柄控制

zkh7758的博客 1700

立创星火计划:基于STM32H743VIH6的Maverick_H743_MK1.0高性能开源飞控硬件全解析

本文详细解析了基于STM32H743VIH6核心的Maverick_H743_MK1.0高性能开源飞控硬件设计。重点阐述了采用双IMU冗余设计、高精度气压计、多路独立电源管理以及丰富接口(如CAN总线)的考量,旨在为穿越机、科研无人机等平台提供强大、可靠的飞行控制解决方案。

weixin_28787801的博客 198

Error>: CGContextDrawImage: invalid context 0x0. If you want to see the backtrace, please set CG_CON

这个错误是说你控件的上下文错误 举个例子: 如果你先添加了一个laebl1,适配完毕后再添加一个label2,label2的约束是相对于label而言的,那么因为某些原因,label1没有添加上,那么label2还是以label1为约束条件的话,那么个就会报这个错误了 下面请看效果图

qq_20176153的博客 5304

[AHK] 自动化获取通达信股票代码:从消息钩子到数据提取

本文详细介绍了如何使用AHK(AutoHotkey)通过Windows消息钩子技术自动化获取通达信股票代码,实现高效数据提取和交易自动化。文章涵盖消息机制原理、AHK脚本开发、性能优化及安全注意事项,为股票交易者提供了一套完整的解决方案。

weixin_42614269的博客 617

MacOS应用cocoa application问题

CGContextDrawPath: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable. 关于如何set环境变量: Product -> Scheme -> Edit Scheme -> Run -...

weixin_30551947的博客 193

【科研导航】【计算机视觉与图像处理】从顶刊到潜力股:跨学科(电子/电气/信息)SCI期刊投稿全景图

本文全面解析了计算机视觉与图像处理领域的SCI期刊投稿策略,涵盖从顶刊到潜力股的各类期刊特点。重点介绍了IEEE Transactions系列、Elsevier旗舰期刊以及二区优质期刊的审稿偏好和投稿技巧,特别适合电子/电气/信息交叉学科的研究者。文章还提供了三区、四区期刊的实用投稿建议,帮助科研新手快速找到适合的发表平台。

weixin_30897233的博客 81

开源ISP实战(1)——基于Zynq7020的Vivado工程移植与调试

本文详细介绍了将开源ISP项目移植到正点原子Zynq7020开发板的实战过程。重点阐述了在Vivado中进行工程创建、IP核导入、Block Design框架搭建、时钟配置与管脚约束修改等关键步骤,并提供了系统联调与常见问题的排查思路,为FPGA图像处理开发者提供了完整的移植与调试指南。

weixin_29191081的博客 200

<Error>: CGContextRestoreGState

: CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable. 出错原因:设置app的状态栏样式的使用使用了旧的方式,在info.plist里面设置了View c

seven的技术交流博客 1250

倍福控制第三方伺服走CSV模式--以汇川伺服为例

在使用TwinCAT软件控制标准CiA402协议的EtherCAT伺服时使用TwinCAT软件NC自带的运动控制指令控制伺服,此时伺服驱动器一般工作在CSP/CSV/CST模式。最常见伺服驱动器工作在CSP模式,轨迹规划运行在TwinCAT软件,位置环速度环电流环运行在伺服驱动器中。该模式下速度波动较大,需要极度平稳的速度需要采用CSV模式。本文讲述的是伺服驱动器工作在CSV模式,此时轨迹规划和位置环均运行在TwinCAT软件,速度环电流环运行在伺服驱动器中。为了简化文字描述,本文采用图文结合的方式介绍伺服

weixin_41883890的博客 4848

iOS 绘图时使用 UIGraphicsGetCurrentContext() 报错的原因分析

iOS 绘图时获取上下文的隐含前奏曲

太阳火神的美丽人生 3347

基于Simulink的BCH码编解码仿真建模示例

BCH码是一类循环码,能够纠正一定数量的随机错误。灵活性:可以根据需要选择不同的码长和纠错能力。高效性:适用于短码长和中等码长的场景,广泛用于卫星通信、存储系统等。实现简单:编码和解码过程可以通过硬件或软件高效实现。在本示例中,我们将使用MATLAB/Simulink中的和模块来完成BCH码的编解码操作,并通过仿真验证其误码率(BER)性能。通过本指南,我们介绍了如何基于Simulink搭建一个BCH码的编解码模型,并进行了仿真以验证其性能。背景介绍:理解BCH码的基本原理及其在通信系统中的应用。

xiaoheshang_123的博客 191

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IOS开发错误记录之Quartz绘图出来不是线而是点的原因

无聊做一个画图软件,为了方便我就用一个imageview座位画布,结果绘制时出现如下情况 原因是由于绘制时点的坐标是locationInView:self.view;也就是控制器的根据在控制器的view上得坐标得来的,所以imageview必须与控制器初始位置严格对其,即与控制器view坐标原点(左上角对其),因此imageview的frame一定要设置正确。

qq_26194487的博客 359

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

UIView类绘图出现错误提示

一:问题: Jan 16 15:49:53 CUBOT Band Ⅲ[2082] <Error>: CGContextSetLineWidth: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable. Ja...

weixin_30381793的博客 136

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ios绘图时的坐标处理

在iOS中,进行绘图操作时,一般主要是在UIView:drawRect中调用 UIGraphicsBeginImageContextWithOptions等一系列函数,有时候直接画图就行,比如UIImage的drawRect等,有时候需要进行稍微复杂的操作,比如颜色混合,mask等,需要对CGContextRef进行CTM变换,通过今天查阅资料了解到: UIKit和Quartz 绘图的坐标系统...

weixin_30652491的博客 133

IOS自定义alertview

在家闲来无事,于是就看起来ios绘图的那块,写点什么好呢? 鼓捣了一会,总算写出了一个小东西 这个是写完以后的效果 这里我实现了三种款式的alertview 分别是成功,错误和警告,剩下的呢有空继续添加吧。 废话不说了,讲一下代码的思路 我用的是UIBezierPath进行绘图 ios有很多种绘图的方式,要讲的话在写几篇都写不完,这里就不详细介绍了。 UIBezierPath绘图分三个步骤 ...

weixin_30587025的博客 94

CGContextSaveGState: invalid context

: CGContextSaveGState: invalid context 0x0 : CGContextDrawLinearGradient: invalid context 0x0 : CGContextSetFillColorWithColor: invalid context 0x0 : CGContextFillRects: invalid context 0x0 : CGCo

谁的青春不迷茫 2649

iOS 6编程实战

《iOS 6编程实战》 基本信息 原书名:iOS 6 Programming Pushing the Limits 作者: (美)Rob Napier Mugunth Kumar [作译者介绍] 译者: 陈晓亮 武海峰 邓强 周庆成 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787115312181 上架时间:2013-3-21 出版日期:2013 年4...

weixin_30294021的博客 347

错误:CGContextSetStrokeColorWithColor: invalid context 0x0

CGContextSetStrokeColorWithColor: invalid context 0x0.

DCSnail-蜗牛 4094

整理下最近用canvas遇到的问题吧

1.canvas.toBlob()在iOS上存在兼容问题; 现象:会出现转blob对象失败的情况; 解决办法: 通过canvas.toDataUrl()转base64,再由base64转blob。

鲸落 1950

MaLiang API完全指南:掌握iOS Metal绘图的核心类与最佳实践

MaLiang是一款基于Metal的iOS绘图库,为开发者提供了高效、灵活的涂鸦和绘图功能。本文将详细介绍MaLiang的核心API、常用类与方法,帮助开发者快速上手并实现专业级绘图应用。 ## 核心类概览:构建绘图应用的基石 MaLiang的核心架构围绕几个关键类展开,这些类协同工作实现从用户输入到图像渲染的完整流程。 ### Canvas:绘图的主舞台 `Canvas`类是MaLian

gitblog_00788的博客 690

IOS 在 drawRect方法以外 调用UIGraphicsGetCurrentContext() 是错误的

想在initWithFrame或者其他函数里调用UIGraphicsGetCurrentContext()函数, 结果被告知Invalid Context,查资料。 按照文档中的说法,系统会维护一个CGContextRef的栈,而UIGraphicsGetCurrentContext()会取栈顶的CGContextRef, 正确的做法是只在drawRect里调用UIGraphicsGetCu

风---的专栏 5136
上一篇: iOS 警告收录及科学快速的消除方法
下一篇: cookie 和session 的区别详解
光速之年
博客等级 码龄12年 31粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值