给定渐变时,CoreGraphics未按预期绘制

时间:2012-04-09 14:44:37

标签: iphone objective-c core-graphics

这是我的代码:

CGContextSaveGState(context);
    CGContextAddRect(context, CGContextGetClipBoundingBox(context));
    CGContextAddPath(context, pickerPath);
    CGContextEOClip(context);
    CGContextAddPath(context, pickerPath);

//Gradient
    CGColorSpaceRef baseSpace = CGColorSpaceCreateDeviceRGB();

    CGFloat colors[20];

    colors[0] = 0.255;
    colors[1] = 0.255;
    colors[2] = 0.286;
    colors[3] = 1.0;
    colors[4] = 0.169;
    colors[5] = 0.169;
    colors[6] = 0.188;
    colors[7] = 1.0;
    colors[8] = 0.153;
    colors[9] = 0.153;
    colors[10] = 0.173;
    colors[11] = 1.0;
    colors[12] = 0.133;
    colors[13] = 0.133;
    colors[14] = 0.149;
    colors[15] = 1.0;
    colors[16] = 0.122;
    colors[17] = 0.122;
    colors[18] = 0.137;
    colors[19] = 1.0;

    CGFloat locations[] = { 0.0, 0.171, 0.580, 0.580, 1.0 };

    CGGradientRef gradient = CGGradientCreateWithColorComponents(baseSpace, colors, locations, 5);
    CGContextDrawLinearGradient(context, gradient, CGPointMake(0, 0), CGPointMake(0, 257), 0);

//Red fill
    CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
    CGContextFillPath(context);

    CGContextRestoreGState(context);

它绘制渐变,但不绘制红色填充。如果我注释掉渐变,它仍然不会绘制红色填充。

任何想法为什么?

1 个答案:

答案 0 :(得分:1)

问题可能是您在上下文仍被剪裁时尝试填充椭圆。尝试在2个操作中进行绘图:

CGContextSaveGState(context);
// Draw gradient with ellipse clipped-out as you do now
CGContextRestoreGState(context);
CGContextSaveGState(context);
// Set ellipse path again and fill it
CGContextRestoreGState(context);