2010-11-02 109 views
1

使用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

我覺得可能是困惑是,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軸開始,然後測量是逆時針的(例如按照極座標) - 但是你看到的是錯誤的方法每個蘋果在初始基準向量上翻轉。