CoreGraphics не отрисовывается, как ожидалось, при заданном градиенте

Это мой код:

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

Он рисует градиент, но не рисует красную заливку. Если я закомментирую градиент, он все равно не нарисует красную заливку.

Есть идеи, почему?


person Andrew    schedule 09.04.2012    source источник


Ответы (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);
person Vladimir    schedule 09.04.2012