Я пытаюсь получить произвольный цвет. Я сделал это с помощью грубой силы, но этот метод кажется чрезмерно трудоемким (хотя распределение довольно даже):
- (UIColor *) getRandomColor {
// GOAL: reject colors that are too dark
float total = 3;
float one = arc4random() % 256 / 256.0;
total -= one;
float two = arc4random() % 256 / 256.0;
total -= two;
float three = total; // UIColor will chop out-of-range nums
NSMutableArray *threeFloats = [[[NSMutableArray alloc] initWithObjects:[NSNumber numberWithFloat:one], [NSNumber numberWithFloat:two], [NSNumber numberWithFloat:three], nil] autorelease];
NSNumber *red, *green, *blue;
red = [threeFloats objectAtIndex:arc4random() % [threeFloats count]];
[threeFloats removeObject:red];
green = [threeFloats objectAtIndex:arc4random() % [threeFloats count]];
[threeFloats removeObject:green];
blue = [threeFloats lastObject];
return [UIColor colorWithRed:[red floatValue] green:[green floatValue] blue:[blue floatValue] alpha:1];
}
Как это может быть улучшено? Я хочу ровное распределение красного, зеленого и синего и ничего слишком темного (иначе, я захватил бы три случайных числа и был бы сделан с ним).
+ (UIColor *)colorWithHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha;
CGFloat hue = ( arc4random() % 256 / 256.0 ); // 0.0 to 1.0
CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from white
CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5; // 0.5 to 1.0, away from black
Если с белым все в порядке, сделайте насыщенность, например оттенок, а не яркость.
Я бы, вероятно, сгенерировал (псевдо) случайные числа для оттенка, насыщенности и яркости (или HSB), с ограничением яркости (или яркости) любым диапазоном, который вы сочтете разумным, тогда преобразовать это в RGB .
Этот метод может помочь вам быстро генерировать яркие цвета случайным образом:
1 - Pick a random integer between 0-2
2 - If it is 0, set Red to Random(0.75-1.0), Green and Blue to Random(0.0-1.0)
2 - If it is 1, set Green to Random(0.75-1.0), Red and Blue to Random(0.0-1.0)
2 - If it is 2, set Blue to Random(0.75-1.0), Green and Red to Random(0.0-1.0)