コア グラフィックスを介して 2 つの線形グラデーションを描画し、それらの間を 3 つ目の白黒の線形グラデーションでマスキングすることにより、下の図に示す 4 ポイント グラデーションを作成する予定です。
コア グラフィックスなどを使用して 4 点グラデーションを描画するより効率的な方法はありますか?
コア グラフィックスを介して 2 つの線形グラデーションを描画し、それらの間を 3 つ目の白黒の線形グラデーションでマスキングすることにより、下の図に示す 4 ポイント グラデーションを作成する予定です。
コア グラフィックスなどを使用して 4 点グラデーションを描画するより効率的な方法はありますか?
4 つの円を描きます。
放射状透明グラデーションを適用する:
結果:
ノート:
CGBlendModeを使用すると、マスクのグラデーションを保存できます。正確な色を制御するのは難しいです。ただし、それが重要でない場合は、コード行の点で、またパフォーマンスの点でも、もう少し効率的である可能性があります。
これは、いくつかのランダムな色とCGBlendModeExclusionの例です(CGBlendModeDifferenceは同様の効果をもたらします)
- (void) drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(ctx, kCGBlendModeExclusion);
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGFloat col1[8] = {
1.0, 0.0, 0.0, 1.0,
0.0, 0.0, 1.0, 1.0
};
CGGradientRef grad1 = CGGradientCreateWithColorComponents (space, col1, NULL, 2);
CGContextDrawLinearGradient(ctx, grad1, CGPointMake(0, 0), CGPointMake(0, 320), 0);
CGFloat col2[8] = {
1.0, 0.5, 0.0, 1.0,
0.0, 1.0, 0.0, 1.0
};
CGGradientRef grad2 = CGGradientCreateWithColorComponents (space, col2, NULL, 2);
CGContextDrawLinearGradient(ctx, grad2, CGPointMake(0, 0), CGPointMake(320, 0), 0);
CGGradientRelease(grad1);
CGGradientRelease(grad2);
CGColorSpaceRelease(space);
}