IOS中使用CGContext画图填充渐变颜色图层

原创 2015年07月10日 15:25:08

-(void)fillColor

//pointArr中存放的是每个点的CGPoint,自右向左画

    //填充颜色

    float alpha = 0;

    //计算分层透明度

    

    

    CGContextRef gc = UIGraphicsGetCurrentContext();

    

    //创建CGMutablePathRef

    CGMutablePathRef path = CGPathCreateMutable();


        if ([pointArr count]>1) {

            for (int j =1; j<[pointArr count]; j++) {

                CGPoint point = [pointArr[j-1] CGPointValue];

                CGPathMoveToPoint(path, NULL,point.x, point.y);//右上角开始画

                CGContextMoveToPoint(gc,  point.x, point.y);

                CGPathAddLineToPoint(path, NULL, point.x, SELF_HEIGHT - 3);//右下角画

                CGPoint point1 = [pointArr[j] CGPointValue];

                CGPathAddLineToPoint(path, NULL, point1.x, SELF_HEIGHT - 3);//左下角画

                CGPathAddLineToPoint(path, NULL, point1.x, point1.y);

                CGContextAddLineToPoint(gc, point1.x, point1.y);//左上角

                CGPathCloseSubpath(path);

                CGContextStrokePath(gc);

                CGPoint point2 = [pointArr[j-1] CGPointValue];

                CGPoint point3 =[pointArr[j] CGPointValue];

                if (pointArr.count>0) {

                    if (point2.y<point3.y) {

                       

                    alpha = [self separatedAlpha:point2.y];

                        

                    }else

                    {

                     alpha = [self separatedAlpha:point3.y];

                

                    }

                }

    

                for (int i = 0;i<pointArr.count-1; i++) {

                    [pointArr removeObjectAtIndex:i];

                }

            }

            

            


            //绘制渐变透明度有100%到28%整体再透明度14%

            [self drawLinearGradient:gc path:path startColor:[UIColor colorWithRed:0/255.0 green:142/255.0 blue:170/255.0 alpha:alpha * 0.14].CGColor endColor:[UIColor colorWithRed:0/255.0 green:142/255.0 blue:170/255.0 alpha:0.28*0.14].CGColor];

            

            

            //Context中获取图像,并显示在界面上

            UIImage *img = UIGraphicsGetImageFromCurrentImageContext();

            UIGraphicsEndImageContext();

            

            UIImageView *imgView = [[UIImageView alloc] initWithImage:img];

            [self addSubview:imgView];

            

        }

}

-(float)separatedAlpha:(float)heightVlaue

{

   //计算分层透明度

    float height = ((37.0-self.min)/self.interval*self.horizontalLineInterval-self.contentScroll.y+StartHeight);

    

    return(SELF_HEIGHT -  heightVlaue)/height;

}

- (void)drawLinearGradient:(CGContextRef)context

                      path:(CGPathRef)path

                startColor:(CGColorRef)startColor

                  endColor:(CGColorRef)endColor

{

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

    CGFloat locations[] = { 0.0, 1.0 };

    

    NSArray *colors = @[(__bridge id) startColor, (__bridge id) endColor];

    

    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations);

    

    

    CGRect pathRect = CGPathGetBoundingBox(path);

    

    //具体方向可根据需求修改 可改变方向是的渐变颜色45°或者垂直方向渐变颜色

    CGPoint startPoint = CGPointMake(CGRectGetMidX(pathRect), CGRectGetMinY(pathRect));

    CGPoint endPoint = CGPointMake(CGRectGetMidX(pathRect), CGRectGetMaxY(pathRect));

    

    CGContextSaveGState(context);

    CGContextAddPath(context, path);

    CGContextClip(context);

    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);

    CGContextRestoreGState(context);

    

    CGGradientRelease(gradient);

    CGColorSpaceRelease(colorSpace);

}





CGContextRef用法

quartz 是主要的描画接口,支持基于路径的描画、 抗锯齿渲染、渐变填充模式、图像、颜色、坐标空间变换、以及PDF 文档的创建、显示、和分析。UIKit 为Quartz 的图像和颜色操作提供了Ob...
  • perfect_promise
  • perfect_promise
  • 2012年06月13日 17:02
  • 32368

IOS学习 绘图 UIBezierPath 绘基本图形、样式设置、渲染填充

#import "CZView.h" @implementation CZView -(void)drawRect:(CGRect)rect{     //1...
  • ridxmc
  • ridxmc
  • 2016年04月29日 22:03
  • 4465

iOS实现渐变背景色的三种方法

In some particular circumstances, we want to use a gradient background view. As far as my knowledge ...
  • lgouc
  • lgouc
  • 2015年08月03日 13:29
  • 28439

iOS 为UIView添加渐变色的两种方法

一、CAGradientLayer介绍 二、Core Graphics 三、Demo地址
  • LOLITA0164
  • LOLITA0164
  • 2017年07月11日 15:16
  • 1170

iOS开发 颜色渐变效果

iOS开发 颜色渐变效果  #import  [cpp] view plaincopyprint? CAGradientLayer *gradient = [CAGradie...
  • qq_32807559
  • qq_32807559
  • 2015年11月20日 11:58
  • 85

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

iOS Core Graphics 的渐变可以分成径向渐变和辐射渐变.可以实现如下的图形: 可以在view 的 - (void)drawRect:(CGRect)rect实现 CGCont...
  • lcl130
  • lcl130
  • 2014年12月03日 13:03
  • 5259

重写drawRect:方法后,无法修改背景颜色问题

发现的问题:自定义一个view,重写它的drawRect方法后,就无法修改这个view的背景颜色,不管是在外部访问这个view,还是在初始化方法中设置,一旦设置backgroundColor这个属性,...
  • xyzdm123
  • xyzdm123
  • 2015年07月15日 11:40
  • 3508

目前在学coreText绘制,为什么绘制的区域的背景色是黑色,怎么设置背景色?

目前在学coreText绘制,为什么绘制的区域的背景色是黑色 ? 尝试很多方法都没法改变绘制区的背景色,求指点。 #import "TXTCView.h" @implementation...
  • tuanquxun1996
  • tuanquxun1996
  • 2016年12月29日 15:33
  • 393

iOS绘制渐变背景滑动条

本文记录的是如何绘制一个背景颜色渐变的滑动条,最终的效果如下图:
  • CaryaLiu
  • CaryaLiu
  • 2015年10月20日 22:01
  • 1602

IOS_CGContextRef画各种图形

#import "CustomView.h"@implementation CustomView- (id)initWithFrame:(CGRect)frame { self = [supe...
  • u012745229
  • u012745229
  • 2016年03月25日 17:31
  • 1534
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS中使用CGContext画图填充渐变颜色图层
举报原因:
原因补充:

(最多只允许输入30个字)