ios - SKShapeNode.fillColor 不等于原始 UIColor

标签 ios swift sprite-kit uicolor skshapenode

我刚刚浪费了很多时间来寻找为什么下面的代码给出不相等结果的答案:

let originalColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1.0)
let section = SKShapeNode(path: path.cgPath)
section.fillColor = originalColor
let isEqual = section.fillColor == originalColor //=> gives false

我不知道,这有什么问题。我比较了颜色空间和 UIColor 对应的 CGColor,只有 CGColor 有不同的 hashValue。但这是为什么呢?上面的代码应该可以工作,非常简单,我在这里缺少什么?

编辑 我使用下面的代码来比较 UIColor:

extension SKColor {

static func !=(lhs: UIColor, rhs: UIColor) -> Bool {
    return !lhs.isEqualTo(rhs)
}

func isEqualTo(_ color: UIColor) -> Bool {
    var red1: CGFloat = 0, green1: CGFloat = 0, blue1: CGFloat = 0, alpha1: CGFloat = 0
    getRed(&red1, green:&green1, blue:&blue1, alpha:&alpha1)

    var red2: CGFloat = 0, green2: CGFloat = 0, blue2: CGFloat = 0, alpha2: CGFloat = 0
    color.getRed(&red2, green:&green2, blue:&blue2, alpha:&alpha2)

    return red1 == red2 && green1 == green2 && blue1 == blue2 && alpha1 == alpha2
}

}

一些其他 UIColor 的比较结果 - 以相同的方式实例化(红色/绿色/蓝色后缀 1 是形状的 fillColor:

(lldb) po red1
0.8784313797950745

(lldb) po red2
0.8784313725490196

(lldb) po green1
0.10196078568696976

(lldb) po green2
 0.10196078431372549

(lldb) po blue1
0.30980393290519714

(lldb) po blue2
0.30980392156862746

最佳答案

尝试改变这个:

return red1 == red2 && green1 == green2 && blue1 == blue2 && alpha1 == alpha2

对此:

return Float(red1) == Float(red2) && 
    Float(green1) == Float(green2) && 
    Float(blue1) == Float(blue2) && 
    Float(alpha1) == Float(alpha2)

关于ios - SKShapeNode.fillColor 不等于原始 UIColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52682557/

相关文章:

ios - 获取圆区域内的所有CGPoint

ios - Cocoapods:重复的接口(interface)定义

ios - 显示 pList 中特定的 "categories"

ios - SpriteKit - 如何处理多种屏幕尺寸?

ios - 重置 ScrollView 位置的简单方法

ios - GLKTextureLoader 如何从图像条加载立方体贴图?

ios - 如何绘制虚线箭头?

ios - 在 Interface builder 中看到的自定义字体,但在 iOS 项目的代码中看不到

ios - 适用于 iOS 的自定义粒子系统

ios - 如何在 Sprite 套件中实现齿轮接头?