将自定义UIView剪切为三角形

时间:2014-03-07 23:37:38

标签: ios objective-c uiview core-graphics

首先,这是我目前情况的图像。

Image

为了实现这一点,我使用了以下方法的子类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完成三角形的方法会更好。

2 个答案:

答案 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
}