2012-07-14 9 views
10

コアグラフィックを使って2つの線形勾配を描き、それらの間に第3の白黒線形勾配でマスキングすることによって、4点勾配を作成しようとしています。iOSの4点勾配

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

enter image description here

答えて

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); 
} 
+0

これは良い解決策であるようです。 – Mrwolfy

+0

これはまさに私が必要としていたものです、いい仕事です! –

9

は、4つの円を描く:

Circles

は放射状の透明グラデーションを適用します。

Gradient

結果:

Result

注意:

  • 灰色の線は、ビットマップのサイズを表します。
  • 円の直径は、ビットマップの直径の2倍です。
  • 各円は、ビットマップコーナーの中央に配置されます。
  • 中央部分のみが効果的に描画されます。
  • 残りの部分はビットマップの外側です。
+0

賢い、ありがとう。 – Mrwolfy