首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在swift 4中比较两个CGColor

如何在swift 4中比较两个CGColor
EN

Stack Overflow用户
提问于 2018-01-04 00:54:40
回答 3查看 1.1K关注 0票数 3

基本上,我想要做的就是将CGColorlayer.fillColorUIColor.black.cgColor进行比较。

在Swift 4中,函数CGColorEqualToColor现在已弃用。

我试过了:

代码语言:javascript
复制
if(layer.fillColor === UIColor.black.cgColor){
          return      
}

但它还是不起作用。我猜它们肯定有相同的kCGColorSpaceModel。

这是日志中每种颜色的输出

代码语言:javascript
复制
<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 )

解决方案是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-04 01:06:08

这是CGColor的一个扩展,它可以检查给定的颜色是否是黑色。这适用于RGB和灰度颜色空间中的颜色。

代码语言:javascript
复制
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())

您可以将其用作:

代码语言:javascript
复制
if layer.fillColor.isBlack() {
    return
}
票数 1
EN

Stack Overflow用户

发布于 2018-01-04 01:21:33

CGColor有一个converted(to:intent:options:)方法

所以也许你可以有一个如下的方法:

代码语言:javascript
复制
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 
    }
}
票数 2
EN

Stack Overflow用户

发布于 2018-01-04 01:01:35

我建议将这两种颜色转换为字符串,然后比较它们正常。要将它们转换为字符串,该https://stackoverflow.com/a/14051861/3342901有一个答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48081748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档