为什么只有内置的 UIColors 在这里工作?
Why does only the built-in UIColors work here?
在进一步尝试独自解决 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 尤其是正确答案!所有人都接受并投票,但我太新手了,无法展示。谢谢! :)
你需要像
一样构造它们
UIColor(red:242.0/255.0, green:90.0/255.0, blue:90.0/255.0, alpha: 1.0)
你可以在Docs
中找到init
red/blue/green values below 0.0 are interpreted as 0.0, and values above 1.0 are interpreted as 1.0.
另外注意也有区别
90/255 // wrong
和
90.0/255.0 // right
后者是正确的,因为前者会截断浮动部分,因为它是整数除法
这应该适合你:
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,所以需要对数值进行除法。
根据文档,红色、绿色、蓝色和 alfa 值分别在 0.0 到 1.0 之间浮动。此外,低于 0.0 的值被视为 0.0,高于 1.0 的值被视为 1.0。
所以你必须将 UIColor 构造为 this
UIColor(red: 91/255, green: 118/255, blue: 211/255, alpha: 1)
在进一步尝试独自解决 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 尤其是正确答案!所有人都接受并投票,但我太新手了,无法展示。谢谢! :)
你需要像
一样构造它们UIColor(red:242.0/255.0, green:90.0/255.0, blue:90.0/255.0, alpha: 1.0)
你可以在Docs
中找到initred/blue/green values below 0.0 are interpreted as 0.0, and values above 1.0 are interpreted as 1.0.
另外注意也有区别
90/255 // wrong
和
90.0/255.0 // right
后者是正确的,因为前者会截断浮动部分,因为它是整数除法
这应该适合你:
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,所以需要对数值进行除法。
根据文档,红色、绿色、蓝色和 alfa 值分别在 0.0 到 1.0 之间浮动。此外,低于 0.0 的值被视为 0.0,高于 1.0 的值被视为 1.0。 所以你必须将 UIColor 构造为 this
UIColor(red: 91/255, green: 118/255, blue: 211/255, alpha: 1)