美文网首页
今天在写渐变图的一些总结,写给自己看的!

今天在写渐变图的一些总结,写给自己看的!

作者: 糊涂0 | 来源:发表于2017-08-21 10:41 被阅读38次
     1  这里是绘制一个图片
    
    //开启图形上下文
    UIGraphicsBeginImageContext(self.bounds.size);
    
    //获得当前画板(上下文)
    CGContextRef gc = UIGraphicsGetCurrentContext();
    //创建CGMutablePathRef (实质是创建绘制路径)
    CGMutablePathRef path = CGPathCreateMutable();
    
    //绘制Path
    CGRect rect = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);
    // 起点
    CGPathMoveToPoint(path, NULL, CGRectGetMinX(rect), CGRectGetMinY(rect));
    CGPathAddLineToPoint(path, NULL, CGRectGetMaxX(rect), CGRectGetMinY(rect));
    CGPathAddLineToPoint(path, NULL, CGRectGetMaxX(rect), CGRectGetMaxY(rect));
    CGPathAddLineToPoint(path, NULL, CGRectGetMinX(rect), CGRectGetMaxY(rect));
    CGPathCloseSubpath(path);
    //绘制渐变
    [self drawLinearGradient:gc path:path LeftColor:lefC CenterColor:centC RightColor:rigtC];
    //注意释放CGMutablePathRef(实质是闭合路径)
    CGPathRelease(path);
    //从Context中获取图像,并显示在界面上(获取绘制的图片)
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    

    2 给绘制的图片加上渐变色

    /**
    绘制线性渐变

    @param context <#context description#>
    @param path <#path description#>
    @param lefC <#lefC description#>
    @param centC <#centC description#>
    @param rigtC <#rigtC description#>
    */

    • (void)drawLinearGradient:(CGContextRef)context path:(CGPathRef)path LeftColor:(UIColor)lefC CenterColor:(UIColor)centC RightColor:(UIColor*)rigtC
      {
    //  绘制背景渐变的
    //  CGColorSpaceCreateDeviceRGB 获得rgb色彩空间
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    
    // 色彩得分梯度范围 (0-1) ,且呈现递增趋势
    CGFloat locations[] = { 0.3,0.7,1.0};
    // 颜色数组
    NSArray *colors = @[(__bridge id) lefC.CGColor, (__bridge id) centC.CGColor,(__bridge id) rigtC.CGColor];
    
    //创建渐变对象
    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations);
    
    // 根据绘制的路径绘制成的矩形的rect
    CGRect pathRect = CGPathGetBoundingBox(path);
    
    //具体方向可根据需求修改
    // 方向只由两个点控制
    
    CGPoint startPoint = CGPointMake(CGRectGetMinX(pathRect), CGRectGetMinY(pathRect));
    CGPoint endPoint = CGPointMake(CGRectGetWidth(pathRect), CGRectGetHeight(pathRect));
    
    // 拓展
    // UIGraphicsPushContext: 压栈当前的绘制对象,生成新的绘制图层
    // CGContextSaveGState:  压栈当前的绘制状态
    
    //    A.将context绘制状态参数上下文copy一份,保存在内存,以后更改的绘制状态不影响内存中的绘制状态
    //    CGContextSaveGState(context)
    //    B.将之前保存的绘制状态覆盖掉context的绘制状态,并将内存中的绘制状态释放
    //    CGContextRestoreGState(context);
    
    
    // 大概意思就是保存当前的绘制状态吧
    CGContextSaveGState(context);
    
    //添加上下文和绘制路径
    CGContextAddPath(context, path);
    
    // 裁剪上下文
    CGContextClip(context);
    
    // 绘制线性的线变色
    CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
    
    // 更新或者覆盖上下文
    CGContextRestoreGState(context);
    
    //释放色渐变
    CGGradientRelease(gradient);
    
    //释放色彩空间
    CGColorSpaceRelease(colorSpace);
    

    }

    相关文章

      网友评论

          本文标题:今天在写渐变图的一些总结,写给自己看的!

          本文链接:https://www.haomeiwen.com/subject/tikcdxtx.html