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

Posted

技术标签:

【中文标题】iOS 7 上 UIView 的 Debug 和 Release 模式绘制的区别【英文标题】:Difference in drawing between Debug and Release modes for UIView on iOS 7 【发布时间】:2014-04-03 01:28:41 【问题描述】:

我有这个代码

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里面做这个吗:? 是的,这段代码是在drawRect里面运行的 【参考方案1】:

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

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);

错误的代码在调试模式下运行,这导致了对错误的混淆。希望这对将来的人有所帮助。

【讨论】:

【参考方案2】:

我知道这是一个老问题,但我遇到了同样的问题,几乎要拔掉我的头发。我尝试了所有我能在这里找到的答案。但是为我解决同样问题的方法是:

在项目的“构建设置”中,转到优化级别。将其从 Fast,smallest 更改为 None 以解决我的问题。

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

希望这可以帮助遇到此问题的其他人。

【讨论】:

以上是关于iOS 7 上 UIView 的 Debug 和 Release 模式绘制的区别的主要内容,如果未能解决你的问题,请参考以下文章

UIView animatewithduration 在 iOS 7 上跳过动画,但在 iOS 8 上运行良好

iOS6/iOS 7 UIView 透明度

iOS 状态栏和 UIView

在情节提要 IOS 7 中根据屏幕宽度和高度修复两个 uiview 大小

模糊包含键盘及其下方内容的 UIView (iOS 7)

iOS 7 - 透明的 UIView 阻塞手势识别器