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);

}





绘制折线图展示数据简单介绍-iOS客户端

在IOS开发的各种app中,有些项目难免会要求我们去使用图表的形式向用户展示一些数据,这就要求RD们需要使用代码根据数据去绘制图表视图,这里为大家介绍下在iOS端如何绘制折线图。先看下效果: 图1...

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

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

iOS绘图教程 绘图、变换、颜色管理、脱屏渲染,模板、渐变、

本文是《Programming iOS5》中Drawing一章的翻译,考虑到主题完整性,翻译版本中加入了一些书中未涉及到的内容。希望本文能够对你有所帮助。(本文由海水的味道翻译整理,转载请注明译者和出...

iOS绘图系列三:画弧线CGContextAddArc ,CGContextAddArcToPoint,CGContextAddCurveToPoint,UIBezierPath

这一节我们来画弧线,我们需要达到的目标是如图所示 可以用CGContext 去实现 CGContextRef ctx = UIGraphicsGetCurrentContext...
  • lcl130
  • lcl130
  • 2014年12月03日 07:14
  • 2357

iOS: CGPathRef上绘制渐变颜色

转自:https://www.mgenware.com/blog/?p=2396 在iOS Core Graphics中绘制渐变颜色主要是通过使用CGContextDraw(xxx)...

iOS渐变图层CAGradientLayer

转载自:http://www.tuicool.com/articles/FBfieu 看支付宝蚂蚁积分,天气预报等好多APP都有圆形渐变效果,今天就试着玩了。 一.CAGrad...

IOS 绘制背景色渐变的矩形

两段代码,首先是使用方法 01 CGContextRef context = UIGraphicsGetCurrentContext(); ...

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
  • 27870

iOS实现颜色渐变的几种方法

1. CAGradientLayer实现渐变 2. Core Graphics相关方法实现渐变 3. 以CAShapeLayer作为layer的mask属性...

折线图中如何填充渐变颜色

此方法实在矩形中填充渐变颜色,再将不需要保留的渐变色用背景颜色覆盖。作为记录留存。 #import "DrawCell.h" #define VIEW_...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOS中使用CGContext画图填充渐变颜色图层
举报原因:
原因补充:

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