2011-03-03 79 views
7

我正在使用一些使用CGPath繪製圓弧的示例代碼。我查看了一下,發現了文檔,但我似乎無法想象在我的腦海中,使用MoveToPoint,AddLineToPoint等方面發生了什麼。我無法「看到」代碼在做什麼,我只能看到結果。如何繪製從頂部開始的圓圈

例如下面的代碼從3點位置開始繪製一個完整的360度弧。對於我的生活,我無法弄清楚如何從12點鐘的位置開始,實際旋轉90度。

有人可以幫我弄清楚這段代碼,以及如何改變它以實現從12點開始,最好試圖解釋這整個路徑的工作原理。或者,也許可以將我指向一個視覺資源在線?

- (void)drawPathWithArc:(CGFloat)arc { 
    CGMutablePathRef thePath = CGPathCreateMutable(); 
    CGPathMoveToPoint(thePath, NULL, 100.f, 100.f); 
    CGPathAddLineToPoint(thePath, NULL, 200.f, 100.f); 
    CGPathAddArc(thePath, NULL, 100.f, 100.f, 100.f, 0.f, (360* M_PI)/180, NO); 
    CGPathCloseSubpath(thePath); 
    shapeLayer_.path = thePath; 
    CGPathRelease(thePath); 
} 

回答

16

路徑真的不是很難直觀地理解。基本上所有的路徑都是連接定義iphone屏幕的笛卡爾平面上的兩個點的線。

當您moveToPoint它將路徑的當前點設置爲指定的點。

addLineToPoint時,它繪製一條從當前點到指定點的直線。

當您添加曲線到點時,它會根據某些切線和控制點繪製從當前點到指定點的曲線。

依此類推。我會推薦閱讀CGPaths上的蘋果文檔,以便更好地理解每個函數在做什麼。

http://developer.apple.com/library/mac/#documentation/graphicsimaging/Reference/CGPath/Reference/reference.html


至於你的問題要在12而不是3使這個開始只是讀了CGPathAddArc函數的文檔。

你需要做的是改變你當前的代碼:

CGPathAddArc(thePath, NULL, 100.f, 100.f, 100.f, 0.f, (360* M_PI)/180, NO); 

到:

CGPathAddArc(thePath, NULL, 100.f, 100.f, 100.f, -M_PI_2, M_PI_2*3, NO); 

這一切正在做的是改變起始角度爲-90度(所有角度都以測量來自水平的弧度)以及結束角度爲270度。


希望這會有所幫助。 乾杯,

布倫頓。

+0

很有道理謝謝。我有一個想法,它是按照你所描述的方式,但是我懷疑我對它的理解,因爲它按照我的意願工作。事實證明,由於其他問題,它沒有工作。 – dubbeat 2011-03-03 22:25:23

+0

@dubbeat - 如果您想了解更多關於Quartz繪圖的信息,我在我的答案[這裏]中指出了一些資源(http://stackoverflow.com/questions/3463256/what-are-some-great-石英-2D-拉出教程/ 3464136#3464136)。 – 2011-03-04 18:39:10

+0

謝謝布拉德。那裏有很多有用的材料 – dubbeat 2011-03-07 09:51:05