2012-02-23 83 views
6

我想使用CGContext上畫一條線,我至今是:使用CGContext上畫線

CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor); 
CGContextSetLineWidth(context, 1.0f); 
CGContextMoveToPoint(context, 10, 10); 
CGContextAddLineToPoint(context, 100, 50); 
CGContextStrokePath(context); 

它總是從左上角頂端右下角繪製。我怎樣才能調整這條線的起點和終點?如何調整線條的長度?

回答

4

這兩條線分別負責起點和終點:

CGContextMoveToPoint(context, 10, 10); // This sets up the start point 
CGContextAddLineToPoint(context, 100, 50); // This moves to the end point. 

通過調整這兩個X,Y點,你可以調整行。線的長度取決於開始點和結束點。

繼續從psoft的答案 - 這是一個基本的example project繪圖,包括創建一個路徑和撫摸它。

這在石英二維指南paths的更多示例代碼中有更詳細的解釋。

7

CoreGraphics ==好時光。

我已經做了一些徒手畫,因爲它是現在已經有一段時間了,我現在做的事情是在繪畫操作之前建立一切。請記住,從Logo開始有一個隱含的「光標」,您可以在不移動繪圖操作的情況下移動它,但必須指定它。我認爲一個好方法(至少對於靜態數字)是創建那些你必須首先繪製的路徑,然後反覆使用路徑來填充,填充,着色等。

CGColorRef fillColor = // yadda 
    CGColorRef strokeColor = // yadda 

    const CGFloat radius = 5.0; 

    // Create the path first - rounded rectangle 
    CGMutablePathRef path = CGPathCreateMutable(); 
    CGPathMoveToPoint(path, NULL, 100.0 - radius, 10.0); 
    CGPathAddLineToPoint(path, NULL, 10.0 + radius, 10.0); 
    CGPathAddArcToPoint(path, NULL, 10.0, 10.0, 10.0, 10.0 + radius, radius); 
    CGPathAddLineToPoint(path, NULL, 10.0, 100.0 - radius); 
    CGPathAddArcToPoint(path, NULL, 10.0, 100.0, 10.0 + radius, 100.0, radius); 
    CGPathAddLineToPoint(path, NULL, 100.0 - radius, 100.0); 
    CGPathAddArcToPoint(path, NULL, 100.0, 100.0, 100.0, 100.0 - radius, radius); 
    CGPathAddLineToPoint(path, NULL, 100.0, 10.0 + radius); 
    CGPathAddArcToPoint(path, NULL, 100.0, 10.0, 100.0 - radius, 10.0, radius); 
    CGPathCloseSubpath(path); 

    // Then use it in your draw commands 
    CGContextSetStrokeColor(context, CGColorGetComponents(strokeColor)); 
    CGContextSetFillColor(context, CGColorGetComponents(fillColor)); 
    CGContextSetLineJoin(context, kCGLineJoinMiter); 
    CGContextSetLineWidth(context, strokeWidth); 

    CGContextAddPath(context, path); 
    CGContextDrawPath(context, kCGPathFillStroke); 
    CGPathRelease(path); 

等如果需要,您可以在最後釋放路徑或保留引用以備後用。

+1

感謝您發佈一些工作代碼。每次我需要CGPathAddArcToPoint時,我都必須通過試用來找出一些錯誤,而這並不會導致理解。蘋果公司的文檔調用價值端點,但後來在圖3.5中談到了切點。通過在紙上畫出你的第一個參數(10,10)在做什麼,我現在看到它基本上是角點,或者用二次貝塞爾曲線表示,它是控制點。將這種理解轉化爲我正在處理的形狀,將它從一個傾斜的矩形轉變爲一個不錯的圓角矩形。 – tobinjim 2012-06-08 13:46:48

+0

快樂的服務 – QED 2012-06-08 22:37:52

+1

你不需要CGPathRelease(路徑);最後? – 2012-07-03 15:42:39