为什么只有内置的UIColors在这里工作? [重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

在我自己解决this question的进一步尝试失败了,我正在尝试一些我认为可以肯定的东西:

func switchColor(data:UInt32){
        switch data {
        case 1..<200:
            backgroundGeometry.firstMaterial?.diffuse.contents =
                UIColor(red: CGFloat(242), green: CGFloat(90), blue: CGFloat(90), alpha: 1.0)
        case 200..<400:
            backgroundGeometry.firstMaterial?.diffuse.contents =
                UIColor(red: CGFloat(252), green: CGFloat(162), blue: CGFloat(115), alpha: 1.0)
        case 400..<600:
            backgroundGeometry.firstMaterial?.diffuse.contents =
                UIColor(red: CGFloat(244), green: CGFloat(235), blue: CGFloat(99), alpha: 1.0)
        case 600..<800:
            backgroundGeometry.firstMaterial?.diffuse.contents =
                UIColor(red: CGFloat(110), green: CGFloat(195), blue: CGFloat(175), alpha: 1.0)
        case 800..<1000:
            backgroundGeometry.firstMaterial?.diffuse.contents =
                UIColor(red: CGFloat(91), green: CGFloat(118), blue: CGFloat(211), alpha: 1.0)
        default:
            backgroundGeometry.firstMaterial?.diffuse.contents = UIColor.green
        }
    }

所有非默认情况都将节点变为白色。默认情况下会将其变为绿色 - 在每种情况下,UIColor.red,UIColor.blue等语句也可以正常工作。

那么为什么上述陈述不起作用呢?

希望你能帮忙,我在这里完全不知所措:(

编辑:感谢快速而非最不正确的答案!所有人都接受并赞成,但我太过新手才能展示。谢谢! :)

swift scenekit uicolor scnnode
3个回答
1
投票

这应该适合你:

func switchColor(data: UInt32) {
    guard let contents = backgroundGeometry.firstMaterial?.diffuse.contents else {
        fatalError("First material is nil") // If this really can be empty, just replace this with return
    }

    switch data {
    case 1..<200:
        contents = UIColor(red: 242/255, green: 90/255, blue: 90/255, alpha: 1)
    case 200..<400:
        contents = UIColor(red: 252/255, green: 162/255, blue: 115/255, alpha: 1)
    case 400..<600:
        contents = UIColor(red: 244/255, green: 235/255, blue: 99/255, alpha: 1)
    case 600..<800:
        contents = UIColor(red: 110/255, green: 195/255, blue: 175/255, alpha: 1)
    case 800..<1000:
        contents = UIColor(red: 91/255, green: 118/255, blue: 211/255, alpha: 1)
    default:
        contents = .green
    }
}

颜色的最大值为1.0,而不是255.因此,您需要对值进行除法。


0
投票

根据文档,红色,绿色,蓝色和阿尔法值分别为0.0到1.0。此外,低于0.0的值被视为0.0,高于1.0的值被视为1.0。所以你必须像这样构造UIColor

UIColor(red: 91/255, green: 118/255, blue: 211/255, alpha: 1) 

0
投票

你需要构建它们

UIColor(red:242.0/255.0, green:90.0/255.0, blue:90.0/255.0, alpha: 1.0)

你可以在Docs找到init

低于0.0的红色/蓝色/绿色值被解释为0.0,高于1.0的值被解释为1.0。

另一个注意也有区别

90/255   // wrong

90.0/255.0  // right

后者是正确的,因为前者将截断浮动部分,因为它是整数除法

© www.soinside.com 2019 - 2024. All rights reserved.