Reputation: 11175
I would like to create a function that will return a colour based on a value that is inserted into it. Ideally what I'm looking to do is have three different colours (e.g. red, green, blue) and a range (e.g. 1 to 100), so that if for example you pass 80 to the function, it will return a colour between green and blue (closer to blue obviously).
Normally I would attempt to write some code before asking for help, but I'm not sure where to start with this one.
Anyone got any suggestions?
Thanks.
Upvotes: 2
Views: 888
Reputation: 7273
Do you mean 0 = Red, 50 = Green and 100 = Blue ?
If number = 40, it's mean It has a lot of Red, some of Green, and none of Blue? am I correct?
I write it in Notepad, please recheck it
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)
}
Upvotes: 1
Reputation: 1136
Here's an idea I had:
func colorForNumber(number: Int) -> UIColor {
let colorLevel = CGFloat(number % 256)
switch (number / 256) {
case 0:
return UIColor(red: colorLevel , green: 0.0, blue: 0.0, alpha: 1.0)
case 1:
return UIColor(red: 0.0 , green: colorLevel, blue: 0.0, alpha: 1.0)
default:
return UIColor(red: 0.0 , green: 0.0, blue: colorLevel, alpha: 1.0)
}
}
Upvotes: 0