根据传递的值返回颜色的函数

时间:2015-07-17 22:18:15

标签: ios swift uicolor

我想创建一个函数,它将根据插入的颜色返回颜色。理想情况下,我要做的是有三种不同的颜色(例如红色,绿色,蓝色)和范围(例如1到100),所以如果你将80传递给函数,它将返回绿色之间的颜色和蓝色(显然更接近蓝色)。

通常情况下,我会在寻求帮助之前尝试编写一些代码,但我不知道从哪一步开始。

有人有任何建议吗?

感谢。

2 个答案:

答案 0 :(得分:1)

你的意思是0 =红色,50 =绿色,100 =蓝色?

如果数字= 40,那就意味着它有很多红色,有些是绿色,而没有蓝色?我是对的吗?

我在记事本中写了它,请重新检查

func getColorFromNumber(number: Int) -> UIColor { 
    // case of color between RED and GREEN
    if number <= 50 {
        // get color 1, base on 50 - number
        let rColor1 = 0
        let gColor1 = CGFloat( Double(50 - number) * 157 / 50 )
        let bColor1 = CGFloat( Double(50 - number) * 29 / 50 )

        // get color 2, base on number
        let rColor2 = CGFloat( Double( number ) * 255 / 50 )
        let gColor2 = CGFloat( Double( number ) * 148 / 50 )
        let bColor2 = 0

        let avgR = (rColor1 + rColor2) / 2
        let avgG = (gColor1 + gColor2) / 2
        let avgB = (bColor1 + bColor2) / 2

        return UIColor(red: avgR , green: avgG, blue: avgB, alpha: 1.0)
    }
    // case of color between GREEN and BLUE
    else if number > 50 {
        // get color 2, base on 100 - number 
        let rColor2 = CGFloat( Double( 100 - number ) * 255 / 50 )
        let gColor2 = CGFloat( Double( 100 - number ) * 148 / 50 )
        let bColor2 = 0

        // get color 3, base on number - 50
        let rColor3 = CGFloat( Double( number - 50 ) * 255 / 50 )
        let gColor3 = CGFloat( Double( number - 50 ) * 87 / 50 )
        let bColor3 = CGFloat( Double( number - 50 ) * 29 / 50 )

        let avgR = (rColor2 + rColor3) / 2
        let avgG = (gColor2 + gColor3) / 2
        let avgB = (bColor2 + bColor3) / 2

        return UIColor(red: avgR , green: avgG, blue: avgB, alpha: 1.0)
    }

    // this will never called
    return UIColor(red: 1.0 , green: 1.0, blue: 1.0, alpha: 1.0)
}

答案 1 :(得分:0)

这是我的想法:

xor = getCompose (liftA2 (&&) (Compose (||)) (not <$> Compose (&&)))