[英]Why aren't my Arcs drawing on 64 bit iOS devices?
我有使用Core Foundation函数CGPathAddArc()创建圆弧(也称为半圆)的代码。 在某些情况下,当代码在64位OS设备(iPad Air和Air 2,iPhone 5s,iPhone 6等)上运行时,不会绘制圆弧,但会在32位设备上绘制。
代码看起来像这样:
CGPathAddArc(path,
nil,
CGRectGetMidX(bounds),
CGRectGetMidY(bounds),
MIN(bounds.size.width/2, bounds.size.height/2),
3*M_PI_2,
-M_PI_2,
_drawArcClockwise
);
在该示例中,如果_drawArcClockwise
为TRUE,则绘制弧线,但是如果_drawArcClockwise
为FALSE
,则不绘制_drawArcClockwise
。
我还测试了等效的UIBezierPath函数,它给出了相同的结果。
您可以在名为ArcTest的存储库中的github上看到一个显示此问题的示例项目(链接)
答案似乎是iOS的64位实现中存在错误。 (或者可能是32位实现中的错误。)无论哪种行为正确,32位和64位设备在响应具有相同参数的同一调用时的行为都会有所不同。
修复上面的代码是在顺时针== FALSE时交换startAngle和endAngle参数:
CGFloat startAngle, endAngle;
startAngle = _drawArcClockwise ? 3*M_PI_2 : -M_PI_2;
endAngle = _drawArcClockwise ? -M_PI_2 : 3*M_PI_2;
CGPathAddArc(path,
nil,
CGRectGetMidX(bounds),
CGRectGetMidY(bounds),
MIN(bounds.size.width/2, bounds.size.height/2),
startAngle,
endAngle,
_drawArcClockwise
);
该代码可在32位和64位平台上运行。 我还没有检查在两个平台上绘制圆弧的方向。 (通常没关系,但是如果您是在形状层中使用圆弧创建动画并操纵形状层的strokeStart和/或strokeEnd属性,那将很重要。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.