iOS中的四点渐变

问题描述:

我打算创建一个四点渐变,如下图所示,通过核心图形绘制两个线性渐变,并使用第三个黑白线性渐变在它们之间进行遮罩。iOS中的四点渐变

是否有更有效的方法使用核心图形或其他绘制四点梯度?

enter image description here

当您使用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

画出四个圆圈的例子:

Circles

应用径向透明梯度:

Gradient

结果:

Result

注:

  • 灰色线表示的位图的大小。
  • 圆的直径是位图直径的两倍。
  • 每个圆都位于位图边角的中心。
  • 有效地只绘制中心部分。
  • 其余部分在位图之外。
+0

聪明,谢谢。 – Mrwolfy 2012-07-15 04:38:21