对颜色进行排序 (Objective-C)

2024-01-06

我正在做这样的事情:

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对颜色进行排序 (Objective-C) 的相关文章

随机推荐

  • Eclipse 不会将项目识别为库(ActionBarSherlock/ViewPagerIndicator)

    我想得到动作栏夏洛克 http actionbarsherlock com 和查看寻呼指示器 http viewpagerindicator com 为我的项目设置的库 但我似乎遇到了一些问题 我早些时候向杰克 沃顿 Jake Wharto
  • C# HttpWebRequest - 使用 Gzip 压缩

    我有一个程序可以生成大量 HttpWebRequest 并且我读到了有关使用 gzip 压缩来加速响应数据下载的内容 我知道 gzip 是什么以及它如何工作 但我不知道它在 C 中如何工作 假设我有一个简单的 GET 请求 HttpWebR
  • Folium 地图在 Spyder 中不显示

    标题说明了一切 我无法让 Spyder 显示地图folium 这是我得到的 import folium m folium Map location 45 5236 122 6750 m 没有错误 也没有地图 只是这样 m render No
  • 为什么要把 try/catch 块放在循环之外?

    这是实践与模式团队的代码审查指南 http msdn microsoft com zh cn library ms998574 scalenetchapt13 topic7 http msdn microsoft com zh cn lib
  • jQuery - 拖动时停止悬停事件

    我正在创建一个拖放图像环境 如果您将鼠标悬停在图像上 则会在其上方弹出一个小菜单 如果单击并拖动图像 可以对它们重新排序 我遇到的问题是 我希望在拖动时禁用悬停事件 目前 如果您拖动图像 它会触发您悬停在其上的其他图像上的所有悬停菜单 ul
  • 在休眠应用程序中设置字节码提供程序的问题

    我正在尝试添加 cglib 作为默认字节代码提供程序 我在用hibernate cfg xml文件来配置会话工厂
  • 应用程序在 Activity 中抛出 java.lang.StackOverflowError 异常

    我正在开发一款 Android 应用程序 在我的一项活动中 我使用 PullToRefreshListView 有时我得到java lang StackOverflowError 错误我的活动例外 我尝试修复它 我也在谷歌上搜索 但没有得到
  • 我如何发现我的delphi应用程序当前是否有模式窗口?

    我在 Delphi MDI 应用程序中运行了一个计时器 如果后台发生变化 我想用它弹出一条消息 但我不希望当应用程序在前台有模式对话框时弹出该消息 因为用户对此无能为力 那么我想知道如何检查我的应用程序中是否存在模式对话框 您可以尝试使用以
  • 如何克隆文件名中带有冒号的文件

    当我使用 msysgit 克隆存储库时 所有文件名中带有空格的文件都不会被删除 然后在状态中显示为已删除 文件名看起来像这样 styles ie 1 12 11 6 02 PM css所以它实际上可能是冒号或括号 如何获取这些文件以使我的本
  • Reactjs 淡入淡出 div 与内联样式

    我怎样才能添加一个fade in动画到 div fading in text div 仅使用内联样式 class Practise extends Component state show false componentDidMount s
  • 在张量流中解包(unstack)具有一个 None 维度的输入(占位符)

    我正在尝试将 LSTM 与具有不同时间步长 不同帧数 的输入一起使用 rnn static rnn 的输入应该是 tf 序列 不是 tf 所以 我应该将我的输入转换为序列 我尝试使用 tf unstack 和 tf split 但它们都需要
  • cocoapods activesupport冲突ios开发

    我尝试在 cocoapods 项目上报告此问题 但被指示在此处发布 我最近承担了一个工作项目 但我无法让以前的顾问设置在我的本地工作站上运行 然而 当我运行时 我能够成功安装 cocoapods gempod install它爆炸了 spe
  • Django modelform:是否可以内联添加相关模型?

    我真的希望这不是重复的 我找不到任何东西 但这可能意味着我不擅长搜索 我有一个 Django 应用程序 并且工作人员已经在使用管理应用程序来 嗯 管理目的 我还为特定模型创建了一个快速数据输入页面 基本上是通过在基本模板中放置模型表单来创建
  • 为什么“git describe”在我的干净 git 存储库副本上显示较旧的标签版本?

    一些背景 我目前有两个本地 git 存储库 它们指向相同的源 主项目 我有两个 git 存储库的原因是 我有一个干净的主副本 我可以在需要时使用 还有一个副本 我可以在沙箱中应用更改 提交等 这可能有点矫枉过正 但有一些优点对我个人来说 有
  • 模型更改时角度视图(DOM 元素)不会更新

    在最新稳定的 Chrome 中运行最新稳定版本的 Angular 我对位于 ng 控制器 A 的视图内的 DOM 元素进行了 ng click 但 DOM 元素本身的 ng controller 设置为another控制器 B ng cli
  • F# 记录的字段声明为私有时出现奇怪的可访问范围

    我刚刚注意到 当 F 记录的字段部分被声明为私有时 出现了相当违反直觉的行为 这与是否可以将记录的字段设为私有 或者将记录成员设置为私有 https stackoverflow com questions 12389308 is it po
  • iPhone 在 API 调用后重新启动

    我面临一个非常奇怪的问题 我的 iPhone 正在重新启动 此问题仅在特定场景下发生 第 1 步 我有一个同步过程 其中加载整个应用程序的数据 所以我基本上通过上传 4 5 个相机捕获的图像并同步应用程序数据来进行大量的 API 调用 第
  • Netbeans 7.4 for PHP 上的“不要直接访问超级全局 $_SERVER 数组”

    是的 类似的问题已发布并正确回答 Netbeans 7 4 for PHP 上警告 不要直接访问超全局 POST 数组 https stackoverflow com questions 19767894 warning do not ac
  • div外框

    我有一个关于 div 和框架的问题 当框架内有下拉列表时 按下下拉列表时 下拉列表将显示在框架外部 我有一个替代下拉列表 它几乎具有相同的属性 但我必须将元素彼此相邻显示 因此元素显示在 div 中 我的问题 有没有办法 当您按下替代下拉菜
  • 对颜色进行排序 (Objective-C)

    我正在做这样的事情 NSArray colors float divisor 3333 NSMutableArray retVal NSMutableArray array for float one 0 one lt 1 0f one d