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 上运行良好