首先,这是我目前情况的图像。
为了实现这一点,我使用了以下方法的子类UIView:
-(void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextBeginPath(ctx);
CGContextMoveToPoint (ctx, CGRectGetMinX(rect), CGRectGetMinY(rect)); // top left
CGContextAddLineToPoint(ctx, CGRectGetMaxX(rect), CGRectGetMidY(rect)); // mid right
CGContextAddLineToPoint(ctx, CGRectGetMinX(rect), CGRectGetMaxY(rect)); // bottom left
CGContextClosePath(ctx);
CGContextSetRGBFillColor(ctx, 0, 1, 0, 1);
CGContextFillPath(ctx);
}
我的最终目标是剪裁彩色区域,以便只留下霓虹绿色。 (我稍后会翻转颜色)。我希望它看起来像一个饼图。我猜有一种方法可以剪掉彩色的角落,但我不知道。 CGContextClip(ctx)不起作用。
我也在使用Pixate框架。如果有人知道用Pixate完成三角形的方法会更好。
答案 0 :(得分:2)
将UIView剪切到路径的最简单方法是创建CAShapeLayer,添加图层路径,并将形状图层添加为视图图层的蒙版。
答案 1 :(得分:2)
或者使用CGPathRef,基本上是相同的,但在核心基础级别
eg..
{
// before existing drawing code..
CGMutablePathRef clipTriangle = CGPathCreateMutable();
CGPathMoveToPoint (clipTriangle, nil, startX, startY);
CGPathAddLineToPoint(clipTriangle, nil, secondPointX, secondPointY);
CGPathAddLineToPoint(clipTriangle, nil, thirdPointX, thirdPointY);
CGPathCloseSubpath(clipTriangle);
CGContextSaveGstate(ctx);
CGContextAddPath(ctx, clipTriangle); /// this is the essential line I left out, we drew the triangle and forgot to use it, clipping to nothing instead, sorry mate
CGContextClip(ctx);
//draw stuff that you wanted clipped here...
CGContextRestoreGstate(ctx);
CGPathRelease(clippingTriangle); //CFstuff still needs manual memory management regardless of ARC
}