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
|
#import "Common.h"
#import "UIImageView+Coloring.h"
#import "UIColor+MapsMeColor.h"
#import <objc/runtime.h>
@implementation UIImageView (Coloring)
- (void)setMwm_name:(NSString *)mwm_name
{
objc_setAssociatedObject(self, @selector(mwm_name), mwm_name, OBJC_ASSOCIATION_COPY_NONATOMIC);
self.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@_%@", mwm_name, [UIColor isNightMode] ? @"dark" : @"light"]];
}
- (NSString *)mwm_name
{
return objc_getAssociatedObject(self, @selector(mwm_name));
}
- (void)setMwm_coloring:(MWMImageColoring)mwm_coloring
{
objc_setAssociatedObject(self, @selector(mwm_coloring), @(mwm_coloring), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
if (mwm_coloring == MWMImageColoringOther)
return;
if (isIOS7)
[self makeImageAlwaysTemplate];
[self applyColoring];
}
- (MWMImageColoring)mwm_coloring
{
return static_cast<MWMImageColoring>([objc_getAssociatedObject(self, @selector(mwm_coloring)) integerValue]);
}
- (void)applyColoring
{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
self.tintColor = [[UIColor class] performSelector:self.coloringSelector];
if (isIOS7 && self.mwm_coloring == MWMImageColoringSeparator)
self.backgroundColor = [[UIColor class] performSelector:self.coloringSelector];
#pragma clang diagnostic pop
}
- (void)changeColoringToOpposite
{
if (self.mwm_coloring == MWMImageColoringOther)
{
if (self.mwm_name)
self.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@_%@", self.mwm_name, [UIColor isNightMode] ? @"dark" : @"light"]];
return;
}
if (isIOS7)
[self makeImageAlwaysTemplate];
[self applyColoring];
}
- (SEL)coloringSelector
{
switch (self.mwm_coloring)
{
case MWMImageColoringBlack:
return @selector(blackSecondaryText);
case MWMImageColoringBlue:
return @selector(linkBlue);
case MWMImageColoringGray:
return @selector(blackHintText);
case MWMImageColoringOther:
return @selector(white);
case MWMImageColoringSeparator:
return @selector(blackDividers);
}
}
- (void)setHighlighted:(BOOL)highlighted
{
switch (self.mwm_coloring)
{
case MWMImageColoringBlack:
self.tintColor = highlighted ? [UIColor blackHintText] : [UIColor blackSecondaryText];
break;
case MWMImageColoringGray:
self.tintColor = highlighted ? [UIColor blackSecondaryText] : [UIColor blackHintText];
break;
case MWMImageColoringOther:
case MWMImageColoringBlue:
case MWMImageColoringSeparator:
break;
}
}
- (void)setColoring:(NSString *)coloring
{
if ([coloring isEqualToString:@"MWMBlue"])
self.mwm_coloring = MWMImageColoringBlue;
else if ([coloring isEqualToString:@"MWMBlack"])
self.mwm_coloring = MWMImageColoringBlack;
else if ([coloring isEqualToString:@"MWMOther"])
self.mwm_coloring = MWMImageColoringOther;
else if ([coloring isEqualToString:@"MWMGray"])
self.mwm_coloring = MWMImageColoringGray;
else if ([coloring isEqualToString:@"MWMSeparator"])
self.mwm_coloring = MWMImageColoringSeparator;
else
NSAssert(false, @"Incorrect UIImageView's coloring");
}
@end
|