在iOS中顺时针绘制圆弧会导致逆时针弧形

时间:2014-07-16 14:03:14

标签: ios cgpath

我使用以下代码在圆的下半部分绘制弧。

根据Apple的文件:

  

此方法创建一个开放的子路径。创建的弧位于   指定圆的周长。在默认情况下绘制时   坐标系,起始角和终止角是基于单位的   圆圈如图1所示。例如,指定起始角度为0   弧度,π弧度的终止角度,顺时针设置   参数为YES绘制圆的下半部分。然而,   指定相同的开始和结束角度但设置顺时针   参数设置为NO将绘制圆圈的上半部分。

enter image description here 我写了

    std::complex<double> start1(   std::polar(190.0,0.0) );


    CGPoint targetStart1 = CGPointMake(start1.real() + 342.0, start1.imag() + 220.);

    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, NULL, targetStart1.x, targetStart1.y);
    CGPathAddArc(path, NULL, 342.0, 220.0, 190, 0.0, PI_180,   YES );
    CGContextAddPath(context, path);
    CGContextSetLineWidth( context, 15.0  );

    // set the color for the stroked circle
    CGContextSetStrokeColorWithColor( context, [UIColor greenColor].CGColor);

    CGContextStrokePath(context);
    CGPathRelease(path);

但是,圆弧在圆圈的上半部分绘制(参见绿色环)。我想知道我是否意外地在代码中某处翻转了协调系统,但我不知道我应该搜索什么命令。

enter image description here

感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

根据Vinzzz的评论:由于一些不透明的原因,Apple在OS X和iOS之间翻转了窗口管理器的坐标系。 OS X使用方格纸布局,原点位于左下方,正y位于上方。 UIKit使用英语阅读顺序,原点在左上方,正y在向下进行。

Core Graphics保留OS X方法; UIKit只是将其输出颠倒过来。如果你真的想说服自己,请扔一些核心文本。

标准解决方案是将当前变换矩阵转换和缩放为任何drawRect:中的前两个步骤,有效地将原点移回到该视图的左下方并翻转y坐标轴。