我使用以下代码在圆的下半部分绘制弧。
根据Apple的文件:
此方法创建一个开放的子路径。创建的弧位于 指定圆的周长。在默认情况下绘制时 坐标系,起始角和终止角是基于单位的 圆圈如图1所示。例如,指定起始角度为0 弧度,π弧度的终止角度,顺时针设置 参数为YES绘制圆的下半部分。然而, 指定相同的开始和结束角度但设置顺时针 参数设置为NO将绘制圆圈的上半部分。
我写了
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);
但是,圆弧在圆圈的上半部分绘制(参见绿色环)。我想知道我是否意外地在代码中某处翻转了协调系统,但我不知道我应该搜索什么命令。
感谢您的帮助。
答案 0 :(得分:7)
根据Vinzzz的评论:由于一些不透明的原因,Apple在OS X和iOS之间翻转了窗口管理器的坐标系。 OS X使用方格纸布局,原点位于左下方,正y位于上方。 UIKit使用英语阅读顺序,原点在左上方,正y在向下进行。
Core Graphics保留OS X方法; UIKit只是将其输出颠倒过来。如果你真的想说服自己,请扔一些核心文本。
标准解决方案是将当前变换矩阵转换和缩放为任何drawRect:
中的前两个步骤,有效地将原点移回到该视图的左下方并翻转y坐标轴。