iOS渐变颜色可设置渐变方向

参考原文

1
2
3
4
5
6
7
8
9
10
11
12
13
#import <UIKit/UIKit.h>
//渐变方向
typedef NS_ENUM(NSUInteger, GradientType) {
GradientTypeTopToBottom = 0, //从上到小
GradientTypeLeftToRight = 1, //从左到右
GradientTypeUpleftToLowright = 2, //左上到右下
GradientTypeUprightToLowleft = 3, //右上到左下
};
@interface UIImage (GradientColor)
+ (UIImage *)gradientColorImageFromColors:(NSArray *)colors
gradientType:(GradientType)gradientType
imgSize:(CGSize)imgSize;
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#import "UIImage+GradientColor.h"
@implementation UIImage (GradientColor)
+ (UIImage *)gradientColorImageFromColors:(NSArray *)colors
gradientType:(GradientType)gradientType
imgSize:(CGSize)imgSize {
NSMutableArray *colorsArray = [NSMutableArray array];
for (UIColor *color in colors) {
[colorsArray addObject:(id)color.CGColor];
}
UIGraphicsBeginImageContextWithOptions(imgSize, YES, 1);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGColorSpaceRef colorSpace =
CGColorGetColorSpace([[colors lastObject] CGColor]);
CGGradientRef gradient =
CGGradientCreateWithColors(colorSpace, (CFArrayRef)colorsArray, NULL);
CGPoint start;
CGPoint end;
switch (gradientType) {
case GradientTypeTopToBottom:
start = CGPointMake(0.0, 0.0);
end = CGPointMake(0.0, imgSize.height);
break;
case GradientTypeLeftToRight:
start = CGPointMake(0.0, 0.0);
end = CGPointMake(imgSize.width, 0.0);
break;
case GradientTypeUpleftToLowright:
start = CGPointMake(0.0, 0.0);
end = CGPointMake(imgSize.width, imgSize.height);
break;
case GradientTypeUprightToLowleft:
start = CGPointMake(imgSize.width, 0.0);
end = CGPointMake(0.0, imgSize.height);
break;
default:
break;
}
CGContextDrawLinearGradient(context, gradient, start, end,
kCGGradientDrawsBeforeStartLocation |
kCGGradientDrawsAfterEndLocation);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
CGGradientRelease(gradient);
CGContextRestoreGState(context);
CGColorSpaceRelease(colorSpace);
UIGraphicsEndImageContext();
return image;
}
@end

使用

1
2
3
4
5
6
7
UIColor *topleftColor = [UIColor colorWithHexString:@"4fc2e9"];
UIColor *bottomrightColor = [UIColor colorWithHexString:@"0379b2"];
UIImage *bgImg =
[UIImage gradientColorImageFromColors:@[ topleftColor, bottomrightColor ]
gradientType:GradientTypeLeftToRight
imgSize:kScreenSize];
[UITabBar appearance].barTintColor = [UIColor colorWithPatternImage:bgImg];