12

コア グラフィックスを介して 2 つの線形グラデーションを描画し、それらの間を 3 つ目の白黒の線形グラデーションでマスキングすることにより、下の図に示す 4 ポイント グラデーションを作成する予定です。

コア グラフィックスなどを使用して 4 点グラデーションを描画するより効率的な方法はありますか?

ここに画像の説明を入力

4

2 に答える 2

12

4 つの円を描きます。

サークル

放射状透明グラデーションを適用する:

勾配

結果:

結果

ノート:

  • 灰色の線はビットマップ サイズを表します。
  • 円の直径は、ビットマップの直径の 2 倍です。
  • 各円は、ビットマップ コーナーの 1 つを中心にしています。
  • 事実上、中央部分のみが描画されます。
  • 残りの部分はビットマップの外側にあります。
于 2012-07-14T15:10:07.747 に答える
7

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);
}
于 2012-07-14T15:09:41.663 に答える