UIColor+LhGray.m
4.78 KB
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
//
// UIColor+LhGray.m
// SmartCity
//
// Created by luoh on 2021/3/25.
// Copyright © 2021 StarHome. All rights reserved.
//
#import "UIColor+LhGray.h"
#import <objc/runtime.h>
@implementation UIColor (LhGray)
+(void)lh_colorSwizzldColorMethedWith:(BOOL)changeGray{
Class cls = object_getClass(self);
//将系统提供的colorWithRed:green:blue:alpha:替换掉
Method originMethod = class_getClassMethod(cls, @selector(colorWithRed:green:blue:alpha:));
Method swizzledMethod = class_getClassMethod(cls, @selector(lg_colorWithRed:green:blue:alpha:));
[self swizzleMethodWithOriginSel:@selector(colorWithRed:green:blue:alpha:) oriMethod:originMethod swizzledSel:@selector(lg_colorWithRed:green:blue:alpha:) swizzledMethod:swizzledMethod class:cls];
//将系统提供的colors也替换掉
NSArray *array = [NSArray arrayWithObjects:@"redColor",@"greenColor",@"blueColor",@"cyanColor",@"yellowColor",@"magentaColor",@"orangeColor",@"purpleColor",@"brownColor",@"systemBlueColor",@"systemGreenColor", nil];
for (int i = 0; i < array.count ; i ++) {
SEL sel = NSSelectorFromString(array[i]);
SEL lg_sel = NSSelectorFromString([NSString stringWithFormat:@"lg_%@",array[i]]);
Method originMethod = class_getClassMethod(cls, sel);
Method swizzledMethod = class_getClassMethod(cls, lg_sel);
[self swizzleMethodWithOriginSel:sel oriMethod:originMethod swizzledSel:lg_sel swizzledMethod:swizzledMethod class:cls];
}
}
+ (void)swizzleMethodWithOriginSel:(SEL)oriSel
oriMethod:(Method)oriMethod
swizzledSel:(SEL)swizzledSel
swizzledMethod:(Method)swizzledMethod
class:(Class)cls {
BOOL didAddMethod = class_addMethod(cls, oriSel, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod));
if (didAddMethod) {
class_replaceMethod(cls, swizzledSel, method_getImplementation(oriMethod), method_getTypeEncoding(oriMethod));
} else {
method_exchangeImplementations(oriMethod, swizzledMethod);
}
}
+ (UIColor *)lg_redColor {
// 1.0, 0.0, 0.0 RGB
UIColor *color = [self lg_redColor];
color = [self changeGrayWithColor:color Red:1.0 green:0.0 blue:0.0 alpha:1.0];
return color;
}
+ (UIColor *)lg_greenColor {
// 0.0, 1.0, 0.0 RGB
UIColor *color = [self lg_greenColor];
color = [self changeGrayWithColor:color Red:0.0 green:1.0 blue:0.0 alpha:1.0];
return color;
}
+ (UIColor *)lg_blueColor {
//0.0, 0.0, 1.0
UIColor *color = [self lg_blueColor];
color = [self changeGrayWithColor:color Red:0.0 green:0.0 blue:1.0 alpha:1.0];
return color;
}
+ (UIColor *)lg_cyanColor {
// 0.0, 1.0, 1.0
UIColor *color = [self lg_cyanColor];
color = [self changeGrayWithColor:color Red:0.0 green:1.0 blue:1.0 alpha:1.0];
return color;
}
+ (UIColor *)lg_yellowColor {
//1.0, 1.0, 0.0
UIColor *color = [self lg_yellowColor];
color = [self changeGrayWithColor:color Red:1.0 green:1.0 blue:0.0 alpha:1.0];
return color;
}
+ (UIColor *)lg_magentaColor {
// 1.0, 0.0, 1.0
UIColor *color = [self lg_magentaColor];
color = [self changeGrayWithColor:color Red:1.0 green:0.0 blue:1.0 alpha:1.0];
return color;
}
+ (UIColor *)lg_orangeColor {
// 1.0, 0.5, 0.0
UIColor *color = [self lg_orangeColor];
color = [self changeGrayWithColor:color Red:1.0 green:0.5 blue:0.0 alpha:1.0];
return color;
}
+ (UIColor *)lg_systemBlueColor {
UIColor *color = [self lg_systemBlueColor];
color = [self changeGrayWithColor:color Red:0.0 green:0.0 blue:1.0 alpha:1.0];
return color;
}
+ (UIColor *)lg_systemGreenColor {
UIColor *color = [self lg_systemGreenColor];
color = [self changeGrayWithColor:color Red:0.0 green:1.0 blue:0.0 alpha:1.0];
return color;
}
+ (UIColor *)lg_purpleColor {
// 0.5, 0.0, 0.5
UIColor *color = [self lg_purpleColor];
color = [self changeGrayWithColor:color Red:0.5 green:0.0 blue:0.5 alpha:1.0];
return color;
}
+ (UIColor *)lg_brownColor {
// 0.6, 0.4, 0.2
UIColor *color = [self lg_brownColor];
color = [self changeGrayWithColor:color Red:0.6 green:0.4 blue:0.2 alpha:1.0];
return color;
}
+ (instancetype)lg_colorWithRed:(CGFloat)r green:(CGFloat)g blue:(CGFloat)b alpha:(CGFloat)a {
UIColor *color = [self lg_colorWithRed:r green:g blue:b alpha:a];
if (r == 0 && g == 0 && b == 0) {
return color;
}
color = [self changeGrayWithColor:color Red:r green:g blue:b alpha:a];
return color;
}
+ (UIColor *)changeGrayWithColor:(UIColor *)color Red:(CGFloat)r green:(CGFloat)g blue:(CGFloat)b alpha:(CGFloat)a {
CGFloat gray = r * 0.299 +g * 0.587 + b * 0.114;
UIColor *grayColor = [UIColor colorWithWhite:gray alpha:a];
return grayColor;
}
@end