代码之家  ›  专栏  ›  技术社区  ›  Pablo

绘制线段时为零度

  •  1
  • Pablo  · 技术社区  · 14 年前

    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 回复  |  直到 14 年前
        1
  •  1
  •   Tommy    14 年前

    我认为可能的混淆是Mac OS X使用的是图纸坐标(所以,原点是左下角,正X是右上角,正y是上角),而I OS使用的是英文读取顺序坐标(原点是左上角,正X仍然是右上角,但正y是下角)。由于CoreGraphics在两个平台上的坐标操作相同,如果您在iOS上执行的命令与在OSX上执行的命令完全相同,那么您的图形将看起来是颠倒的。这就是为什么你经常看到这样的东西:

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

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