2012-04-09 5 views
0

期待通りに与えられたグラデーションを描画されていません。これは私のコードです: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); 

それはグラデーションを描くが、赤の塗りつぶしを描画されていません。グラデーションをコメントアウトすると、まだ赤い塗りが描画されません。

なぜでしょうか?

答えて

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); 
関連する問題