[英]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
有一個方法轉換(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
}
}
這是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
}
我建議將2種顏色轉換為字符串然后比較正常。 要將它們轉換為字符串,可以找到https://stackoverflow.com/a/14051861/3342901的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.