2

我正在绘制如下形状:

- (void)drawRect:(CGRect)rect
{
    // Draw a cross rectagle
    CGContextRef    context     =   UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);
    CGContextMoveToPoint(context, 190, 0);
    CGContextAddLineToPoint(context, 220, 0);
    CGContextAddLineToPoint(context, 310, 90);
    CGContextAddLineToPoint(context, 310, 120);
    CGContextSetFillColorWithColor(context, [UIColor lightGrayColor].CGColor);
    CGContextFillPath(context);
    CGContextRestoreGState(context);
}

我在下面得到一个浅色十字旗

在此处输入图像描述

现在我想在我刚刚画的十字旗周围画一个笔划

我应该怎么做才能做到这一点。请就这个问题给我建议。谢谢。

4

2 回答 2

2

肯定CGContextDrawPath(context, kCGPathFillStroke);是你所追求的

您可以使用以下方法调整图案和颜色:

CGContextSetStrokePattern
CGContextSetStrokeColor

https://developer.apple.com/library/ios/#documentation/graphicsimaging/reference/CGContext/Reference/reference.html

因此,在您的情况下,假设您想要一个纯黑色笔划,您将拥有:

- (void)drawRect:(CGRect)rect
{
    CGContextRef    context     =   UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);

    CGContextSetLineWidth(context, 2.0);
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextSetFillColorWithColor(context, [UIColor lightGrayColor].CGColor);

    CGContextMoveToPoint(context, 190, 0);
    CGContextAddLineToPoint(context, 220, 0);
    CGContextAddLineToPoint(context, 310, 90);
    CGContextAddLineToPoint(context, 310, 120);
    CGContextClosePath(context);

    CGContextDrawPath(context, kCGPathFillStroke);
    CGContextFillPath(context);

    CGContextRestoreGState(context);
}

产生:

让我想起了Kraftwork! drawRect的结果:

于 2012-11-06T17:51:15.537 回答
0
- (void)drawRect:(CGRect)rect
{
    // Draw a cross rectagle
    CGContextRef    context     =   UIGraphicsGetCurrentContext();
    CGContextSaveGState(context);

    //New
    CGContextSetLineWidth(context, 2.0);

    CGContextMoveToPoint(context, 190, 0);
    CGContextAddLineToPoint(context, 220, 0);
    CGContextAddLineToPoint(context, 310, 90);
    CGContextAddLineToPoint(context, 310, 120);

    //New
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);

    CGContextSetFillColorWithColor(context, [UIColor lightGrayColor].CGColor);
    CGContextFillPath(context);

    //New
    CGContextStrokePath(context);

    CGContextRestoreGState(context);
}

@WDUK:花了几个小时弄清楚后,我知道为什么您的上述答案不起作用。原因是当你CGContextFillPath第一次这样做时,路径最终会被清除,然后你就不能再继续这样做CGContextStrokePath了。因此,为了做CGContextFillPathand CGContextStrokePath,我们必须做

CGContextDrawPath(context,  kCGPathFillStroke);

尝试后,我得到以下

在此处输入图像描述

于 2012-11-06T19:43:17.663 回答