【问题标题】:draw a stroke around the shape, core graphic在形状周围画一个笔触,核心图形
【发布时间】:2012-11-06 17:44:34
【问题描述】:

我正在绘制如下形状:

- (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);
}

我在下面得到一个明暗的十字旗

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

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

【问题讨论】:

    标签: objective-c ios core-graphics drawrect


    【解决方案1】:

    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);
    }
    

    生产:

    【讨论】:

    • 我刚刚添加了这些行CGContextSetLineWidth(context, 2.0); CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor); CGContextStrokePath(context);。但是,它不起作用。我确定我在中间遗漏了一些东西。你有什么想法吗?
    【解决方案2】:
    - (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。 因此,为了做到CGContextFillPathCGContextStrokePath,我们必须这样做

    CGContextDrawPath(context,  kCGPathFillStroke);
    

    尝试后,我得到以下内容

    【讨论】:

    • 酷,很高兴你成功了!你想让我更新我的答案吗?
    • 编辑完成,我运行它时得到的截图。再次感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多