今天有个需求,需要给了渐变颜色,然后制作出渐变图片。
应用场景,比如给button设置背景图,然后按下效果是button normal状态下透明度0.7.所以只能用制作图片来做了。
传入常用gradientLayer的colors,button尺寸,圆角参数,最后一个是你传入渐变的不同位置。
eg:CGFloat locations[] = {0.3, 0.6, 1.0};
最后附上封装好的方法。
+ (UIImage *)makeGradientImageWithColors:(NSArray *)colors withSize:(CGSize)size cornerRadius:(CGFloat)radius locations:(CGFloat *)locations {
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGMutablePathRef path = CGPathCreateMutable();
//绘制Path
CGPathMoveToPoint(path, NULL, 0.f, 0.f);
CGPathAddLineToPoint(path, NULL, size.width - radius,0);
CGPathAddArc(path, &CGAffineTransformIdentity, size.width - radius, radius, radius, -0.5 *M_PI,0.0,0);
CGPathAddLineToPoint(path, NULL, size.width, size.height - radius);
CGPathAddArc(path, &CGAffineTransformIdentity, size.width - radius, size.height - radius, radius,0.0,0.5 *M_PI,0);
CGPathAddLineToPoint(path, NULL, radius, size.height);
CGPathAddArc(path, &CGAffineTransformIdentity, radius, size.height - radius, radius,0.5 *M_PI,M_PI,0);
CGPathAddLineToPoint(path, NULL, 0, radius);
CGPathAddArc(path, &CGAffineTransformIdentity, radius, radius, radius,M_PI,1.5 *M_PI,0);
CGPathCloseSubpath(path);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef) colors, locations);
CGPoint startPoint = CGPointMake(0, 0);
CGPoint endPoint = CGPointMake(size.width, 0);
CGContextSaveGState(context);
CGContextAddPath(context, path);
CGContextClip(context);
CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
CGContextRestoreGState(context);
CGGradientRelease(gradient);
CGColorSpaceRelease(colorSpace);
CGPathRelease(path);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
效果: