Skip to content

Commit 354682a

Browse files
authored
Fix issue that textColor of AnimateableLabel refers incorrect userInterfaceStyle (#601)
* Fix issue that referring to dynamic color with incorrect trait collection * modify logic for visibility
1 parent 229d1a9 commit 354682a

File tree

2 files changed

+56
-22
lines changed

2 files changed

+56
-22
lines changed

Sources/Tabman/Bar/Extensions/UIColor+Interpolation.swift

Lines changed: 51 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

Sources/Tabman/Bar/Generic/AnimateableLabel.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@ internal class AnimateableLabel: UIView {
3434
}
3535
set {
3636
let textColor = newValue ?? .black
37-
textLayer.foregroundColor = textColor.cgColor
37+
if #available(iOS 13, *) {
38+
textLayer.foregroundColor = textColor.resolvedColor(with: traitCollection).cgColor
39+
} else {
40+
textLayer.foregroundColor = textColor.cgColor
41+
}
3842
}
3943
}
4044
var font: UIFont? {

0 commit comments

Comments
 (0)