SKShapeNode.fillColor не соответствует оригинальному UIColor - PullRequest
0 голосов
/ 06 октября 2018

Я только что потратил много часов на поиски ответа, почему приведенный ниже код не дает равных результатов:

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 s:

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

1 Ответ

0 голосов
/ 06 октября 2018

Попробуйте изменить это:

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)
...