在iOS 7上,UIView在Debug模式和Release模式下绘制的区别

3

我有这段代码

CGFloat dashArray[] = {5,2};
CGContextSetLineDash(context, 3, dashArray, 4);
CGMutablePathRef path = [self newArcPathAtPoint:point withRadius:radius startAngle:startAngle endAngle:endAngle];
[color setStroke];
CGContextAddPath(context, path);
CGContextStrokePath(context);
CGPathRelease(path);

在“调试”模式下,它给了我这个:

在调试模式下绘图

而在“发布”模式下,它则是这样的:

在发布模式下绘图

我不知道如何开始调试。有人可以帮助我修复它或者提供一些调试的思路吗?


你是在 drawRect: 方法里面做这件事吗? - Matt S.
是的,这段代码在drawRect函数内运行。 - e7mac
2个回答

5

所以我终于找到了问题所在。这一行就是问题所在:

CGFloat dashArray[] = {5,2};
CGContextSetLineDash(context, 3, dashArray, 4);

我开始收到以下错误信息:

CGContextSetLineDash: invalid dash array: negative lengths are not allowed.

进一步调查后,发现我需要修复发送到CGContextSetLineDash的参数。以下内容可行:
CGFloat dashArray[] = {5,2};
CGContextSetLineDash(context, 0, dashArray, 2);

尽管错误的代码在调试模式下能够正常工作,这也导致了人们对问题的困惑。希望这能帮助未来的某个人。


1

我知道这是一个老问题,但我也遇到了同样的问题,几乎要把我的头发都拔光了。我尝试了这里所有能找到的答案。但对我来说解决相同问题的方法是:

  • 在项目的“构建设置”中,进入优化级别。将发布版本从“快速、最小”更改为“无”,可以解决我的问题。

似乎在此阶段发生了一些事情,影响了虚线的绘制方式。

希望这能帮助其他遇到这个问题的人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接