我想删除以下图片的蓝色部分。如何剪切绘图的反转? (我相信这是提问的正确方法)
Triangle的示例代码:(如果有更好的三角形代码,我也会接受!;)
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);
答案 0 :(得分:1)
一个简单的解决方案是使用UIBazierPath。根据您的意图绘制Bazier路径。然后调用[path addClip]方法。它将剪切封闭路径外的所有内容 例如,以下代码会使您的视图成为一个角落。
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.bounds
byRoundingCorners:UIRectCornerAllCorners
cornerRadii:CGSizeMake(6.0, 6.0)];
[path addClip];
答案 1 :(得分:0)
要剪切任何路径的反转,只需在剪辑中添加一个封闭的矩形。
在这种情况下,如果我找到你,你想要剪掉形状的红色笔划。通常,由于描边路径的线宽,这在石英中不是一件容易的事。当然,对于这两种形状,我们可以计算红色笔划的轮廓并围绕它进行剪裁。但是一般解决方案需要一种方法来计算包含路径,包括线宽。
还有其他方法可以包含位图蒙版 - 但最佳解决方案取决于您绘制的具体内容。我只是遇到了类似的问题,我可以使用专门的石英混合模式非常优雅和高效地解决问题。这在很大程度上取决于绘图前centext的内容以及结果应如何与UI的其余部分混合。