如何在 swift 4 中比较两个 CGColor
how to Compare two CGColor in swift 4
基本上我想做的就是比较 layer.fillColor
是 CGColor
和 UIColor.black.cgColor
.
函数 CGColorEqualToColor
现已在 Swift 4 中弃用。
我试过:
if(layer.fillColor === UIColor.black.cgColor){
return
}
而且还是不行。我想他们一定有相同的 kCGColorSpaceModel。
这是日志中每种颜色的输出
<CGColor 0x1c02a15c0> [<CGColorSpace 0x1c02a0a20> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1; extended range)] ( 0 0 0 1 )
<CGColor 0x1c008e290> [<CGColorSpace 0x1c02a0f60> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile; extended range)] ( 0 1 )
有什么解决办法?
我建议将这两种颜色转换为字符串,然后比较它们是否正常。要将它们转换为字符串,有一个答案 。
这是 CGColor
的扩展,用于检查给定颜色是否为黑色。这适用于 RGB 和灰度颜色空间中的颜色。
extension CGColor {
func isBlack() -> Bool {
let count = numberOfComponents
if count > 1 {
if let components = components {
for c in 0..<components.count-1 { // skip the alpha component
// All components are 0 for black
if components[c] != 0.0 {
return false
}
}
return true
}
}
return false
}
}
print(UIColor.black.cgColor.isBlack())
print(UIColor(red: 0, green: 0, blue: 0, alpha: 1).cgColor.isBlack())
您可以将其用作:
if layer.fillColor.isBlack() {
return
}
CGColor
有一个方法 converted(to:intent:options:)
所以也许你可以有如下方法:
extension CGColor
{
func compareConvertingColorSpace(other: CGColor) -> Bool
{
let approximateColor = other.converted(to: self.colorSpace! intent: .defaultIntent, options nil) // fatal errror with no color space
return self == approximateColor
}
}
基本上我想做的就是比较 layer.fillColor
是 CGColor
和 UIColor.black.cgColor
.
函数 CGColorEqualToColor
现已在 Swift 4 中弃用。
我试过:
if(layer.fillColor === UIColor.black.cgColor){
return
}
而且还是不行。我想他们一定有相同的 kCGColorSpaceModel。
这是日志中每种颜色的输出
<CGColor 0x1c02a15c0> [<CGColorSpace 0x1c02a0a20> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; sRGB IEC61966-2.1; extended range)] ( 0 0 0 1 )
<CGColor 0x1c008e290> [<CGColorSpace 0x1c02a0f60> (kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile; extended range)] ( 0 1 )
有什么解决办法?
我建议将这两种颜色转换为字符串,然后比较它们是否正常。要将它们转换为字符串,有一个答案 。
这是 CGColor
的扩展,用于检查给定颜色是否为黑色。这适用于 RGB 和灰度颜色空间中的颜色。
extension CGColor {
func isBlack() -> Bool {
let count = numberOfComponents
if count > 1 {
if let components = components {
for c in 0..<components.count-1 { // skip the alpha component
// All components are 0 for black
if components[c] != 0.0 {
return false
}
}
return true
}
}
return false
}
}
print(UIColor.black.cgColor.isBlack())
print(UIColor(red: 0, green: 0, blue: 0, alpha: 1).cgColor.isBlack())
您可以将其用作:
if layer.fillColor.isBlack() {
return
}
CGColor
有一个方法 converted(to:intent:options:)
所以也许你可以有如下方法:
extension CGColor
{
func compareConvertingColorSpace(other: CGColor) -> Bool
{
let approximateColor = other.converted(to: self.colorSpace! intent: .defaultIntent, options nil) // fatal errror with no color space
return self == approximateColor
}
}