Objective c 排序颜色(目标-C)

Objective c 排序颜色(目标-C),objective-c,ios,color-palette,Objective C,Ios,Color Palette,我在做这样的事情: - (NSArray*)colors { float divisor = .3333; NSMutableArray *retVal = [NSMutableArray array]; for (float one=0; one <= 1.0f; one += divisor) { for (float two = 0; two <= 1.0f; two += divisor) { for (floa

我在做这样的事情:

- (NSArray*)colors {
    float divisor = .3333;
    NSMutableArray *retVal = [NSMutableArray array];
    for (float one=0; one <= 1.0f; one += divisor) {
        for (float two = 0; two <= 1.0f; two += divisor) {
            for (float three = 0; three <= 1.0f; three += divisor) {
                UIColor *color = [UIColor colorWithRed:one green:two blue:three alpha:.5];
                // also bad
                // UIColor *color = [UIColor colorWithHue:one saturation:two brightness:three alpha:.5];
                [retVal addObject:color];
            }
        }
    }
    return retVal;
}
-(NSArray*)颜色{
浮点除数=.3333;
NSMutableArray*retVal=[NSMutableArray];

对于(float one=0;one我认为使用[UIColor colorWithHue:saturation:brightness:alpha:]是最好的选择。如果你调整饱和度、亮度和alpha,只需使用色调,你就能得到所有的颜色

查看更多信息

for (float hsb = 0; hsb <= 1.0f; hsb += divisor) {
             UIColor *color = [UIColor colorWithHue:hsb saturation:1.0f brightness:1.0f alpha:.5f];
            [retVal addObject:color];
}

for(float hsb=0;hsb这非常有效。这无助于您有很多重复的颜色。请参见以下内容:

NSArray *sorted = [[dict allValues] sortedArrayUsingComparator:^NSComparisonResult(UIColor* obj1, UIColor* obj2) {
    float hue, saturation, brightness, alpha;
    [obj1 getHue:&hue saturation:&saturation brightness:&brightness alpha:&alpha];
    float hue2, saturation2, brightness2, alpha2;
    [obj2 getHue:&hue2 saturation:&saturation2 brightness:&brightness2 alpha:&alpha2];
    if (hue < hue2)
        return NSOrderedAscending;
    else if (hue > hue2)
        return NSOrderedDescending;

    if (saturation < saturation2)
        return NSOrderedAscending;
    else if (saturation > saturation2)
        return NSOrderedDescending;

    if (brightness < brightness2)
        return NSOrderedAscending;
    else if (brightness > brightness2)
        return NSOrderedDescending;

    return NSOrderedSame;
}];

为避免重复颜色:您可以将元素放在NSMutableDictionary中,键入它们的色调饱和度亮度(每个四舍五入到最接近的.10)…然后从中获取数组,然后进行排序。

否您应该回答:)如果你看hsb颜色信息,你只需要一个循环就可以得到完整的颜色光谱。哇,如果你在外循环上循环饱和,你会得到一个连贯的东西。很好!+1
float
值应该是
double
,否则它会给出一个
EXC\u BAD\u ACCESS
错误。
    CGFloat *components = (CGFloat *)CGColorGetComponents([color CGColor]);
    float hue = components[0];
    float saturation = components[1]; // etc. etc.