关闭

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

标签: iosCGcontextCGPathRef上绘制渐变颜色
1949人阅读 评论(0) 收藏 举报
分类:

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

}





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3312次
    • 积分:112
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:1篇
    • 译文:6篇
    • 评论:1条
    文章分类
    最新评论