CALayer+Night.m
2.8 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
//
// CALayer+Night.m
// DKNightVersion
//
// Created by Draveness on 16/1/29.
// Copyright © 2016年 DeltaX. All rights reserved.
//
#import "CALayer+Night.h"
#import <objc/runtime.h>
@interface CALayer ()
@property (nonatomic, strong) NSMutableDictionary<NSString *, DKColorPicker> *pickers;
@end
@implementation CALayer (Night)
- (DKColorPicker)dk_shadowColorPicker {
return objc_getAssociatedObject(self, @selector(dk_shadowColorPicker));
}
- (void)setDk_shadowColorPicker:(DKColorPicker)picker {
objc_setAssociatedObject(self, @selector(dk_shadowColorPicker), picker, OBJC_ASSOCIATION_COPY_NONATOMIC);
self.shadowColor = picker(self.dk_manager.themeVersion).CGColor;
[self.pickers setValue:[picker copy] forKey:NSStringFromSelector(@selector(setShadowColor:))];
}
- (DKColorPicker)dk_borderColorPicker {
return objc_getAssociatedObject(self, @selector(dk_borderColorPicker));
}
- (void)setDk_borderColorPicker:(DKColorPicker)picker {
objc_setAssociatedObject(self, @selector(dk_borderColorPicker), picker, OBJC_ASSOCIATION_COPY_NONATOMIC);
self.borderColor = picker(self.dk_manager.themeVersion).CGColor;
[self.pickers setValue:[picker copy] forKey:NSStringFromSelector(@selector(setBorderColor:))];
}
- (DKColorPicker)dk_backgroundColorPicker {
return objc_getAssociatedObject(self, @selector(dk_backgroundColorPicker));
}
- (void)setDk_backgroundColorPicker:(DKColorPicker)picker {
objc_setAssociatedObject(self, @selector(dk_backgroundColorPicker), picker, OBJC_ASSOCIATION_COPY_NONATOMIC);
self.backgroundColor = picker(self.dk_manager.themeVersion).CGColor;
[self.pickers setValue:[picker copy] forKey:NSStringFromSelector(@selector(setBackgroundColor:))];
}
- (void)night_updateColor {
[self.pickers enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull selector, DKColorPicker _Nonnull picker, BOOL * _Nonnull stop) {
CGColorRef result = picker(self.dk_manager.themeVersion).CGColor;
[UIView animateWithDuration:DKNightVersionAnimationDuration
animations:^{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
if ([selector isEqualToString:NSStringFromSelector(@selector(setShadowColor:))]) {
[self setShadowColor:result];
} else if ([selector isEqualToString:NSStringFromSelector(@selector(setBorderColor:))]) {
[self setBorderColor:result];
} else if ([selector isEqualToString:NSStringFromSelector(@selector(setBackgroundColor:)) ]) {
[self setBackgroundColor:result];
}
#pragma clang diagnostic pop
}];
}];
}
@end