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);
等如果需要,您可以在最後釋放路徑或保留引用以備後用。
感謝您發佈一些工作代碼。每次我需要CGPathAddArcToPoint時,我都必須通過試用來找出一些錯誤,而這並不會導致理解。蘋果公司的文檔調用價值端點,但後來在圖3.5中談到了切點。通過在紙上畫出你的第一個參數(10,10)在做什麼,我現在看到它基本上是角點,或者用二次貝塞爾曲線表示,它是控制點。將這種理解轉化爲我正在處理的形狀,將它從一個傾斜的矩形轉變爲一個不錯的圓角矩形。 – tobinjim 2012-06-08 13:46:48
快樂的服務 – QED 2012-06-08 22:37:52
你不需要CGPathRelease(路徑);最後? – 2012-07-03 15:42:39