2012-07-14 77 views
10

我打算創建一個四點漸變,如下圖所示,通過核心圖形繪製兩個線性漸變,並使用第三個黑白線性漸變在它們之間進行遮罩。iOS中的四點漸變

是否有更有效的方法使用核心圖形或其他繪製四點梯度?

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 2012-07-15 04:36:03

+0

真棒,這正是我所需要的,做得好! – 2015-07-14 09:23:36

9

畫出四個圓圈的例子:

Circles

應用徑向透明梯度:

Gradient

結果:

Result

注:

  • 灰色線表示的位圖的大小。
  • 圓的直徑是位圖直徑的兩倍。
  • 每個圓都位於位圖邊角的中心。
  • 有效地只繪製中心部分。
  • 其餘部分在位圖之外。
+0

聰明,謝謝。 – Mrwolfy 2012-07-15 04:38:21