3

我想删除以下图像的蓝色部分。如何剪裁图形的反面?(我相信这是提出问题的正确方法)

三角形的示例代码:(如果有更好的三角形代码,我也会接受!;)

    int lineWidth = 4;

    int w = size.size.width;
    int h = size.size.height - lineWidth;

    CGPoint top = CGPointMake(0+(w/2)+.5, 0);

    CGContextClipToRect(ctx, CGRectMake(0, 0, w, h));
    CGContextStrokePath(ctx);

    CGContextMoveToPoint(ctx, top.x, top.y);
    CGContextAddLineToPoint(ctx, top.x + (w/2), top.y + h  );
    CGContextAddLineToPoint(ctx, top.x - (w/2), top.y + h   );
    CGContextAddLineToPoint(ctx, top.x, top.y);

    CGContextFillPath(ctx);

    CGContextSetLineWidth(ctx, lineWidth);
    CGContextSetLineCap(ctx, kCGLineCapRound);
    CGContextMoveToPoint(ctx, top.x, top.y);
    CGContextAddLineToPoint(ctx, top.x + (w/2), top.y + h  );
    CGContextAddLineToPoint(ctx, top.x - (w/2), top.y + h   );
    CGContextAddLineToPoint(ctx, top.x, top.y);

    CGContextStrokePath(ctx);

在此处输入图像描述

4

2 回答 2

1

一个简单的解决方案是使用 UIBazierPath。根据您的意图绘制一条 Bazier 路径。然后调用 [path addClip] 方法。它将剪辑封闭路径之外的所有内容。
例如,以下代码使您的视图变得圆滑。

UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.bounds
                                           byRoundingCorners:UIRectCornerAllCorners
                                                 cornerRadii:CGSizeMake(6.0, 6.0)];
[path addClip];
于 2012-11-26T14:22:04.633 回答
0

要剪辑任何路径的倒数,只需在剪辑中添加一个封闭的矩形。

在这种情况下,如果我没听错的话,您想剪裁形状的红色笔触。通常,由于描边路径的线宽,这在石英中并不是一件容易的事。当然,对于这两个形状,我们可以计算红色笔触的轮廓并围绕它进行裁剪。但是一个通用的解决方案需要一种方法来计算包含的路径,包括线宽。

还有其他包括位图蒙版的方法——但最好的解决方案取决于你到底在画什么。我刚刚遇到了一个类似的问题,我可以使用专门的石英混合模式非常优雅有效地解决它。这在很大程度上取决于绘制前 centtext 的内容以及结果应如何与 UI 的其余部分混合。

于 2012-11-26T14:33:03.487 回答