为什么只有内置的UIColors在这里起作用?

时间:2019-03-02 15:41:45

标签: swift scenekit uicolor scnnode

在进一步尝试自行解决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之类的语句也可以正常工作。

那么,为什么上面的陈述不起作用?

希望您能提供帮助,我在这里完全不知所措:(

编辑:感谢您迅速而正确的答案!所有这些都被接受和支持,但对于它来说,我实在是一个新手。谢谢! :)

3 个答案:

答案 0 :(得分:1)

这应该对您有用:

formVisible

颜色的最大值是1.0,而不是255。因此,您需要将这些值相除。

答案 1 :(得分:0)

您需要像

那样构造它们
UIColor(red:242.0/255.0, green:90.0/255.0, blue:90.0/255.0, alpha: 1.0)

您可以在Docs

中找到该初始化文件
  

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

另一个说明之间也有区别

90/255   // wrong

90.0/255.0  // right

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

答案 2 :(得分:0)

根据文档,红色,绿色,蓝色和Alfa值分别在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)