使用 UIBezierPath 时出错

Posted

技术标签:

【中文标题】使用 UIBezierPath 时出错【英文标题】:Having an error when using UIBezierPath 【发布时间】:2015-05-04 07:00:23 【问题描述】:

我使用UIBezierPath 来画一条线。但是有一个错误 这是我的代码:

UIBezierPath *aPath = [UIBezierPath bezierPath];
[aPath moveToPoint:CGPointMake(100, 100)];
[aPath addLineToPoint:CGPointMake(200, 200)];
[aPath closePath];
aPath.lineWidth = 5;
[[UIColor redColor] setStroke];
[aPath stroke];

这是错误:

CGContextSetStrokeColorWithColor:无效的上下文 0x0。这是一个 严重错误。此应用程序或它使用的库正在使用 无效的上下文,从而导致整体退化 系统的稳定性和可靠性。此通知是一种礼貌:请 解决这个问题。这将成为即将到来的更新中的致命错误。

【问题讨论】:

***.com/questions/19599266/… 【参考方案1】:

而不是

[[UIColor redColor] setStroke];

使用

CGContextSetStrokeColorWithColor(context, [[UIColor redColor] CGColor]);

你也可以这样做-

CAShapeLayer *shapeLayer = [CAShapeLayer layer];
UIBezierPath *aPath;

aPath = [UIBezierPath bezierPath];
[aPath moveToPoint:CGPointMake(0, 0)];
[aPath addLineToPoint:CGPointMake(size*2, 0)];
[aPath addLineToPoint:CGPointMake(size, size*2)];
[aPath closePath];

shapeLayer.path = aPath.CGPath;
shapeLayer.strokeColor = [[UIColor redColor] CGColor];
shapeLayer.fillColor = color;
shapeLayer.lineWidth = width;

[self addSublayer:shapeLayer];

【讨论】:

我用了你的第二种方式。有效。非常感谢 @thinhvd 省略 [aPath 填充];【参考方案2】:

将这个赞添加到 setStrokeColor

CGContextSetStrokeColorWithColor(context, [[UIColor redColor] CGColor]);

【讨论】:

你用[[UIColor redColor] setStroke];替换了吗?【参考方案3】:

试试这个:在 xcode 中将符号断点添加到 CGPostError。 (添加符号断点,并在符号字段类型CGPostError

当发生错误时,调试器将停止代码执行,您可以检查方法调用堆栈并检查参数。

还要确保您已导入 QuartzCode 框架。

【讨论】:

以上是关于使用 UIBezierPath 时出错的主要内容,如果未能解决你的问题,请参考以下文章

UIView 背景颜色总是黑色

iOS 动画Animation - 5:UIBezier

两个 CGPaths / UIBeziers 之间的补间 / 插值

用贝赛尔曲线把图片, 按钮, label 绘成圆 或圆角矩形

滚动时 UIBezierPath 问题的舍入

使用UIBezierPath绘制图形