Reputation: 6795
How can I generate great looking pastel colors for iOS?
There is an excellent colorful answer in Java by David Crow here: Algorithm to randomly generate an aesthetically-pleasing color palette
So how we adapt it to iOS?
Upvotes: 3
Views: 1604
Reputation: 1198
I have set the random background color using this code.
UIColor *bgColor = color ? color : [self randomColor];
- (UIColor *)randomColor {
srand48(arc4random());
float red = 0.0;
while (red < 0.1 || red > 0.84) {
red = drand48();
}
float green = 0.0;
while (green < 0.1 || green > 0.84) {
green = drand48();
}
float blue = 0.0;
while (blue < 0.1 || blue > 0.84) {
blue = drand48();
}
return [UIColor colorWithRed:red green:green blue:blue alpha:1.0f];
}
Upvotes: 0
Reputation: 6795
A Swift implementation by John Coates appears here: https://gist.github.com/JohnCoates/725d6d3c5a07c4756dec but he wrongly called it "pastel" although not including the required light-blue to achieve that effect.
My Objective-C version for John's git (with mixing of light blue) is here:
// Adapted from Stack Overflow answer by David Crow http://stackoverflow.com/a/43235
-(UIColor*) generateRandomPastelColor
{
// Randomly generate numbers
CGFloat red = ( (CGFloat)(arc4random() % 256) ) / 256;
CGFloat green = ( (CGFloat)(arc4random() % 256) ) / 256;
CGFloat blue = ( (CGFloat)(arc4random() % 256) ) / 256;
// Mix with light-blue
CGFloat mixRed = 1+0xad/256, mixGreen = 1+0xd8/256, mixBlue = 1+0xe6/256;
red = (red + mixRed) / 3;
green = (green + mixGreen) / 3;
blue = (blue + mixBlue) / 3;
return [UIColor colorWithRed:red green:green blue:blue alpha:1];
}
EDIT
I have improved the algorithm, making the colors brighter, by mixing also white into the computation (by adding 1 to the light blue and diving by 3 instead of 2).
Here is a test code for the above method (you can replace viewDidLoad of a new project and run):
#define RECT_SIZE 30
- (void)viewDidLoad {
[super viewDidLoad];
CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
int horizontals = screenWidth / RECT_SIZE;
int verticals = screenHeight / RECT_SIZE;
float offset_h = ((int)screenWidth % RECT_SIZE)/2;
float offset_v = ((int)screenHeight % RECT_SIZE)/2;
for (int v=0; v < verticals; v++) {
for (int h=0; h < horizontals; h++) {
CGRect rect = CGRectMake(offset_h + h * RECT_SIZE, offset_v + v * RECT_SIZE, RECT_SIZE, RECT_SIZE);
UIView *square = [[UIView alloc] initWithFrame:rect];
square.backgroundColor = [self generateRandomPastelColor];
[self.view addSubview:square];
}
}
}
Upvotes: 5