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

2017-08-21  本文已影响38人  糊涂0
 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#>
*/

//  绘制背景渐变的
//  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);

}

上一篇下一篇

猜你喜欢

热点阅读