使用CGContext绘制线条

ahe*_*ang 7 iphone objective-c cgcontext ipad ios

我想用CGContext绘制一条线,到目前为止我是:

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

它总是从左上角到右下角的顶部.如何调整此线的起点和终点?如何调整线的长度?

QED*_*QED 9

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); 
Run Code Online (Sandbox Code Playgroud)

等等.如果需要,您可以在最后释放路径,或者保留参考以供稍后使用.


Abi*_*ern 6

这两行负责起点和终点:

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

通过调整这两个x,y点,您可以调整线条.线的长度取决于起点和终点.

继psoft的答案之后 - 这是一个绘图的基本示例项目,包括创建路径和抚摸它.

此进行更详细的与石英2D指南中多个样品的代码解释的路径.