iphone Рисование градиента внутри многоугольника - PullRequest
1 голос
/ 28 сентября 2011

Я хочу нарисовать градиент внутри многоугольника, используя основную графику. Я могу нарисовать шестиугольник, используя код ниже, но я не знаю, как заполнить этот шестиугольник градиентным цветом. Любая помощь будет по достоинству оценена.

- (void)drawRect:(CGRect)rect
 {
    // Drawing code.

    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0);

    CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0);

    CGContextSetLineWidth(context, 2.0);

    CGPoint center;

    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);
    }

    CGContextClosePath(context);
    CGContextDrawPath(context, kCGPathFillStroke);
}

1 Ответ

1 голос
/ 28 сентября 2011

Используйте следующий код для градиентной заливки

CGContextRef context    = UIGraphicsGetCurrentContext();

CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();

CGFloat colors[] =

{


    0.62890625, 0.859375, 10.9921875, 1.00,
    0.65625, 0.8046875, 0.9453125, 1.00,
};

CGGradientRef gradient = CGGradientCreateWithColorComponents(rgb, colors, NULL, sizeof(colors)/(sizeof(colors[0])*4));

CGColorSpaceRelease(rgb);



// now we can actually create the shape and fill it



CGPoint start, end;



CGContextSetRGBFillColor(context, 0, 0, 0.6, 0.1);

CGContextFillEllipseInRect(context, CGRectMake(0.0, 0.0, 100.0, 100.0));

CGContextStrokeEllipseInRect(context, CGRectMake(0.0, 0.0, 100.0, 100.0));



// Gradient

CGRect myrect = CGRectMake(0.0, 0.0, rect.size.width, rect.size.height);

CGContextSaveGState(context);

CGContextClipToRect(context, myrect);

start = CGPointMake(myrect.origin.x, myrect.origin.y + myrect.size.height * 0.25);

end = CGPointMake(myrect.origin.x, myrect.origin.y + myrect.size.height * 1.0);

CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation);

CGContextRestoreGState(context);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...