绘制段时为零度

时间:2010-11-02 06:26:53

标签: iphone core-graphics

当使用Core Graphics绘制弧段时,我注意到零角度不是我期望的那样,所以为了绘制像图片中的段弧,我使用330和210作为开始和结束值。

CGContextSetFillColorWithColor(ctx, [[UIColor grayColor] CGColor]);
CGContextMoveToPoint(ctx, 300, 300);
CGContextAddArc(ctx, 300, 300, 300,  radians(330), radians(210), 1);
CGContextClosePath(ctx);
CGContextFillPath(ctx); 

任何人都可以了解这些数字的来源吗?我实际上期望300和60之类的东西......它可能与iPhone的轴旋转有关吗?

alt text

1 个答案:

答案 0 :(得分:1)

我认为可能混淆的是Mac OS X使用方格纸坐标(因此,原点是左下角,正x是正确的,正y是向上)但是iOS使用英文阅读顺序坐标(原点是顶部)左,正x仍然是正确的,但正y是向下的)。由于CoreGraphics在坐标方面在两个平台上运行相同,如果您在iOS上执行与在OS X上完全相同的命令,那么您的图形将显得颠倒。这就是为什么你经常会看到类似的东西:

CGAffineTransform newTransform = CGAffineTransformMakeTranslation(0.0f, self.frame.size.height);
newTransform = CGAffineTransformScale(newTransform, 1.0f, -1.0f);

在自定义UIView drawRect:或drawLayer:inContext的顶部:(虽然您可能应该在第二种情况下从CALayer获取大小信息以确保线程安全,具体取决于您决定挂钩drawLayer的原因: inContext:首先)。

因此我认为CGContextAddArc做你认为它做的事情 - 从正x轴开始然后测量是逆时针的(例如根据极坐标) - 但你所看到的是错误的方式每个Apple在初始基础向量上翻转。