@@ -17,27 +17,57 @@ internal extension UIColor {
1717 static func interpolate( betweenColor colorA: UIColor ,
1818 and colorB: UIColor ,
1919 percent: CGFloat ) -> UIColor ? {
20- var redA : CGFloat = 0.0
21- var greenA : CGFloat = 0.0
22- var blueA : CGFloat = 0.0
23- var alphaA : CGFloat = 0.0
24- guard colorA. getRed ( & redA, green: & greenA, blue: & blueA, alpha: & alphaA) else {
25- return nil
20+ if #available( iOS 13 , * ) {
21+ return UIColor ( dynamicProvider: { traitCollection in
22+ var redA : CGFloat = 0.0
23+ var greenA : CGFloat = 0.0
24+ var blueA : CGFloat = 0.0
25+ var alphaA : CGFloat = 0.0
26+
27+ var redB : CGFloat = 0.0
28+ var greenB : CGFloat = 0.0
29+ var blueB : CGFloat = 0.0
30+ var alphaB : CGFloat = 0.0
31+
32+ traitCollection. performAsCurrent {
33+ guard colorA. getRed ( & redA, green: & greenA, blue: & blueA, alpha: & alphaA) else {
34+ return
35+ }
36+ guard colorB. getRed ( & redB, green: & greenB, blue: & blueB, alpha: & alphaB) else {
37+ return
38+ }
39+ }
40+
41+ let iRed = CGFloat ( redA + percent * ( redB - redA) )
42+ let iBlue = CGFloat ( blueA + percent * ( blueB - blueA) )
43+ let iGreen = CGFloat ( greenA + percent * ( greenB - greenA) )
44+ let iAlpha = CGFloat ( alphaA + percent * ( alphaB - alphaA) )
45+
46+ return UIColor ( red: iRed, green: iGreen, blue: iBlue, alpha: iAlpha)
47+ } )
48+ } else {
49+ var redA : CGFloat = 0.0
50+ var greenA : CGFloat = 0.0
51+ var blueA : CGFloat = 0.0
52+ var alphaA : CGFloat = 0.0
53+ guard colorA. getRed ( & redA, green: & greenA, blue: & blueA, alpha: & alphaA) else {
54+ return nil
55+ }
56+
57+ var redB : CGFloat = 0.0
58+ var greenB : CGFloat = 0.0
59+ var blueB : CGFloat = 0.0
60+ var alphaB : CGFloat = 0.0
61+ guard colorB. getRed ( & redB, green: & greenB, blue: & blueB, alpha: & alphaB) else {
62+ return nil
63+ }
64+
65+ let iRed = CGFloat ( redA + percent * ( redB - redA) )
66+ let iBlue = CGFloat ( blueA + percent * ( blueB - blueA) )
67+ let iGreen = CGFloat ( greenA + percent * ( greenB - greenA) )
68+ let iAlpha = CGFloat ( alphaA + percent * ( alphaB - alphaA) )
69+
70+ return UIColor ( red: iRed, green: iGreen, blue: iBlue, alpha: iAlpha)
2671 }
27-
28- var redB : CGFloat = 0.0
29- var greenB : CGFloat = 0.0
30- var blueB : CGFloat = 0.0
31- var alphaB : CGFloat = 0.0
32- guard colorB. getRed ( & redB, green: & greenB, blue: & blueB, alpha: & alphaB) else {
33- return nil
34- }
35-
36- let iRed = CGFloat ( redA + percent * ( redB - redA) )
37- let iBlue = CGFloat ( blueA + percent * ( blueB - blueA) )
38- let iGreen = CGFloat ( greenA + percent * ( greenB - greenA) )
39- let iAlpha = CGFloat ( alphaA + percent * ( alphaB - alphaA) )
40-
41- return UIColor ( red: iRed, green: iGreen, blue: iBlue, alpha: iAlpha)
4272 }
4373}
0 commit comments