1.定义渐变方向
typedef enum {
topToBottom = 0,//从上到小
leftToRight = 1,//从左到右
upleftTolowRight = 2,//左上到右下
uprightTolowLeft = 3,//右上到左下
}GradientType;
2.渐变方法
- (UIImage*) buttonImageFromColors:(NSArray*)colors ByGradientType:(GradientType)gradientType view:(UIView *)view{
NSMutableArray *ar = [NSMutableArray array];
for(UIColor *c in colors) {
[ar addObject:(id)c.CGColor];
}
UIGraphicsBeginImageContextWithOptions(view.frame.size, YES, 1);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGColorSpaceRef colorSpace = CGColorGetColorSpace([[colors lastObject] CGColor]);
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)ar, NULL);
CGPoint start;
CGPoint end;
switch (gradientType) {
case 0:
start = CGPointMake(0.0, 0.0);
end = CGPointMake(0.0, view.frame.size.height);
break;
case 1:
start = CGPointMake(0.0, 0.0);
end = CGPointMake(view.frame.size.width, 0.0);
break;
case 2:
start = CGPointMake(0.0, 0.0);
end = CGPointMake(view.frame.size.width, view.frame.size.height);
break;
case 3:
start = CGPointMake(view.frame.size.width, 0.0);
end = CGPointMake(0.0, view.frame.size.height);
break;
default:
break;
}
CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
CGGradientRelease(gradient);
CGContextRestoreGState(context);
CGColorSpaceRelease(colorSpace);
UIGraphicsEndImageContext();
return image;
}
3.使用
UIView *v = [[UIView alloc ]initWithFrame:CGRectMake(0, 0, 100, 44)];
v.backgroundColor = [UIColor colorWithPatternImage:[self buttonImageFromColors:colorArray2 ByGradientType:upleftTolowRight view:v]]
;
[self.view addSubview:v];