DrawRect:如何在给定一组有序点的情况下填充多边形?

时间:2013-04-15 02:54:58

标签: ios objective-c cocoa-touch drawrect

目前在我的drawRect:方法中,我在点集中的每个点之间画一条线,每个点都表示为CGPoint;但是,现在我想填写这些设定点范围内的区域。我无法用石英api来计算如何做到这一点,有办法吗?

现在,点数是有序的。因此,可以识别哪个点代表多边形的第一个点,依此类推。

2 个答案:

答案 0 :(得分:3)

将您的积分添加到UIBezierPath,然后使用它的填充方法。

答案 1 :(得分:1)

code sample from Apple显示了您需要执行的操作:

-(void)drawInContext:(CGContextRef)context
{
    // Drawing with a white stroke color
    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);
    // Drawing with a blue fill color
    CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0);
    // Draw them with a 2.0 stroke width so they are a bit more visible.
    CGContextSetLineWidth(context, 2.0);

    CGPoint center;

    // Add a star to the current path
    center = CGPointMake(90.0, 90.0);
    CGContextMoveToPoint(context, center.x, center.y + 60.0);
    for(int i = 1; i < 5; ++i)
    {
        CGFloat x = 60.0 * sinf(i * 4.0 * M_PI / 5.0);
        CGFloat y = 60.0 * cosf(i * 4.0 * M_PI / 5.0);
        CGContextAddLineToPoint(context, center.x + x, center.y + y);
    }
    // And close the subpath.
    CGContextClosePath(context);

    // Now add the hexagon to the current path
    center = CGPointMake(210.0, 90.0);
    CGContextMoveToPoint(context, center.x, center.y + 60.0);
    for(int i = 1; i < 6; ++i)
    {
        CGFloat x = 60.0 * sinf(i * 2.0 * M_PI / 6.0);
        CGFloat y = 60.0 * cosf(i * 2.0 * M_PI / 6.0);
        CGContextAddLineToPoint(context, center.x + x, center.y + y);
    }
    // And close the subpath.
    CGContextClosePath(context);

    // Now draw the star & hexagon with the current drawing mode.
    CGContextDrawPath(context, drawingMode);
}

请注意,答案to a similar question中提到了这一点。