2017-02-13 1 views
1

je générer UIColor aléatoire. Je veux éviter les couleurs claires comme le jaune, vert clair etc ... Voici mon codeÉvitez la couleur de la lumière dans UIColor aléatoire

+ (UIColor *)generateRandom { 
    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 

    return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1]; 
} 

J'utilise cela pour UITableViewCell couleur de fond. La couleur du texte de la cellule est blanche. Donc, si la couleur de fond est vert clair ou d'une autre couleur claire sa non visible clairement ...

Comment résoudre ce problème? Pouvons-nous éviter de générer des couleurs claires ou pouvons-nous trouver quelle est la couleur de la lumière?

Si nous pouvons trouver c'est de couleur claire signifie que je peux changer le textcolor à une autre couleur ...

Répondre

0

On dirait que vous voulez éviter les couleurs proches de blanc. Puisque vous êtes déjà dans l'espace HSV, cela devrait être une simple question de définir une distance de blanc à éviter. Une implémentation simple limiterait la saturation et la luminosité à ne pas être plus proche qu'un certain seuil. Quelque chose comme:

if (saturation < kSatThreshold) 
{ 
    saturation = kSatThreshold; 
} 
if (brightness > kBrightnessThreshold) 
{ 
    brightness = kBrightnessThreshold; 
} 

Quelque chose de plus sophistiqué serait de vérifier la distance du blanc et si elle est trop près, repoussez-out:

CGFloat deltaH = hue - kWhiteHue; 
CGFloat deltaS = saturation - kWhiteSaturation; 
CGFloat deltaB = brightness - kWhiteBrightness; 
CGFloat distance = sqrt(deltaH * deltaH + deltaS * deltaS + deltaB * deltaB); 
if (distance < kDistanceThreshold) 
{ 
    // normalize distance vector 
    deltaH /= distance; 
    deltaS /= distance; 
    deltaB /= distance; 
    hue = kWhiteHue + deltaH * kDistanceThreshold; 
    saturation = kWhiteSaturation + deltaS * kDistanceThreshold; 
    brightness = kWhiteBrightness + deltaB * kDistanceThreshold; 
} 
+0

Quelles sont les valeurs à utiliser pour la constante (comme kSatThreshold) –

+0

dépend de vous. Tout ce que vous ressentez est juste assez loin pour être lisible quand le fond est de cette couleur et le texte est blanc. Je voudrais juste expérimenter et voir ce qui fonctionne. Ma conjecture serait que 'kSatThreshold' devrait être quelque part autour de .25-.5 et' kBrightnessThreshold' devrait être autour de .75, mais c'est juste une conjecture. – user1118321

+0

@ user1118321 Beaucoup mieux que ma paresseuse réponse. Upvoted. –

0

Les couleurs claires sont celles avec une luminosité élevée (ou la légèreté, luminosité...).

Generate couleurs avec la teinte et la saturation aléatoire, mais limiter le caractère aléatoire de la luminosité à faible nombre, comme de 0 à 0,5. Ou gardez la luminosité constante. Si vous affichez les couleurs côte à côte, l'impact esthétique est généralement meilleur si vous ne modifiez que 2 des 3 composants dans HSB (HSV, HSL)