ios绘图系列五:绘制渐变CGContextDrawLinearGradient, CGContextDrawRadialGradient, CAGradientLayer

来源:互联网 发布:灵格斯翻译家 for mac 编辑:程序博客网 时间:2024/05/29 03:46

转载自:http://blog.csdn.net/lcl130/article/details/41695685


iOS Core Graphics 的渐变可以分成径向渐变和辐射渐变.可以实现如下的图形:


可以在view 的 - (void)drawRect:(CGRect)rect实现

[objc] view plain copy
  1. CGContextRef ctx = UIGraphicsGetCurrentContext();  
  2.   
  3. //创建一个RGB的颜色空间  
  4. CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();  
  5. //定义渐变颜色数组  
  6. CGFloat colors[] =  
  7. {  
  8.     204.0 / 255.0224.0 / 255.0244.0 / 255.01.00,  
  9.     29.0 / 255.0156.0 / 255.0215.0 / 255.01.00,  
  10.     0.0 / 255.0,  50.0 / 255.0126.0 / 255.01.00,  
  11. };  
  12.   
  13. //创建一个渐变的色值 1:颜色空间 2:渐变的色数组 3:位置数组,如果为NULL,则为平均渐变,否则颜色和位置一一对应 4:位置的个数  
  14. CGGradientRef _gradient = CGGradientCreateWithColorComponents(rgb, colors, NULLsizeof(colors)/(sizeof(colors[0])*4));  
  15. CGColorSpaceRelease(rgb);  
  16.   
  17. //获得一个CGRect  
  18. CGRect clip = CGRectInset(CGContextGetClipBoundingBox(ctx), 20.020.0);  
  19. //剪切到合适的大小  
  20. CGContextClipToRect(ctx, clip);  
  21. //定义起始点和终止点  
  22. CGPoint start = CGPointMake(2020);  
  23. CGPoint end = CGPointMake(20100);  
  24. //绘制渐变, 颜色的0对应start点,颜色的1对应end点,第四个参数是定义渐变是否超越起始点和终止点  
  25. CGContextDrawLinearGradient(ctx, _gradient, start, end, kCGGradientDrawsBeforeStartLocation);  
  26.   
  27. //辐射渐变  
  28. start = CGPointMake(10080);//起始点  
  29. end = CGPointMake(100140); //终结点  
  30. //辐射渐变 start:起始点 20:起始点的半径 end:终止点 40: 终止点的半径 这个辐射渐变  
  31. CGContextDrawRadialGradient(ctx, _gradient, start, 20, end, 400);  

UIKit提供一个CALayer的子类,专门绘制渐变,但是只支持线性渐变

[objc] view plain copy
  1. CAGradientLayer *gradient = [CAGradientLayer layer];//创建渐变层  
  2. gradient.frame = CGRectMake(2020100100);  
  3. [self.view.layer addSublayer:gradient];  
  4. //渐变层的颜色梯度数组  
  5. gradient.colors = @[(__bridge id)[UIColor colorWithRed:204.0 / 255.0 green:224.0 / 255.0 blue:244.0 / 255.0 alpha:1].CGColor,  
  6.                     (__bridge id)[UIColor colorWithRed:29.0 / 255.0 green:156.0 / 255.0 blue:215.0 / 255.0 alpha:1].CGColor,  
  7.                     (__bridge id)[UIColor colorWithRed:0.0 / 255.0 green:50.0 / 255.0 blue:126.0 / 255.0 alpha:1].CGColor];  
  8. //渐变层的相对位置,起始点为0,终止点为1,中间点为 (point-startpoint)/(endpoint-startpoint)  
  9. gradient.locations = @[@0,@.5,@1];  
  10. //渐变方向  
  11. gradient.startPoint = CGPointMake(00);  
  12. gradient.endPoint = CGPointMake(01); 




0 0
原创粉丝点击