gpt4 book ai didi

objective-c - 排序颜色(Objective-C)

转载 作者:技术小花猫 更新时间:2023-10-29 11:02:27 24 4
gpt4 key购买 nike

我正在做这样的事情:

- (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 *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;
}];

您可以在 iOS 4.x 中像这样访问组件 (HSBA):

    CGFloat *components = (CGFloat *)CGColorGetComponents([color CGColor]);
float hue = components[0];
float saturation = components[1]; // etc. etc.

为了避免重复颜色:您可以将元素放在 NSMutableDictionary 中,以诸如它们的色调-饱和度-亮度(每个四舍五入到最接近的 .10)之类的东西为键...然后您得到来自 THAT 的数组,然后排序。

关于objective-c - 排序颜色(Objective-C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8585037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com