Swift 如何提取刚刚随机生成的颜色类型的名称

Swift 如何提取刚刚随机生成的颜色类型的名称,swift,uicolor,Swift,Uicolor,我想生成一个随机颜色,然后提取颜色的名称。我知道我可以通过创建三个随机浮点数然后返回UIColor来生成颜色,但是当需要定义刚刚创建的颜色名称时,我就不知所措了。我认为这是不可能的。但是,您可以创建自己的UIColors词典(其中键是您指定的颜色名称),然后从词典中随机选择一个。我认为这是不可能的。但是,您可以创建自己的UIColors词典(其中键是您指定的颜色名称),然后从词典中随机选择一个。生成随机颜色后,获取rgb值。使用此选项可为适当的rgb值定义颜色名称并生成名称。它当然不涵盖所有颜色

我想生成一个随机颜色,然后提取颜色的名称。我知道我可以通过创建三个随机浮点数然后返回UIColor来生成颜色,但是当需要定义刚刚创建的颜色名称时,我就不知所措了。

我认为这是不可能的。但是,您可以创建自己的UIColors词典(其中键是您指定的颜色名称),然后从词典中随机选择一个。

我认为这是不可能的。但是,您可以创建自己的UIColors词典(其中键是您指定的颜色名称),然后从词典中随机选择一个。

生成随机颜色后,获取rgb值。使用此选项可为适当的rgb值定义颜色名称并生成名称。它当然不涵盖所有颜色,但它是其中一种可能的解决方案。

生成随机颜色后,获取rgb值。使用此选项可为适当的rgb值定义颜色名称并生成名称。它当然不涵盖所有颜色,但它是其中一种可能的解决方案。

另一个选项是为红色、蓝色和绿色定义一组范围。基于颜色RGB值在其各自范围内的位置,它将返回一些近似的颜色名称

例如,如果红色、绿色和蓝色都接近255,则在颜色名称的前面添加“Light”(如“Light Green”)


我还发现它接受随机颜色初始值设定项的枚举值。您可能还可以调整这些枚举以返回相应的字符串值,从而动态地形成颜色名称

另一个选项是为红色、蓝色和绿色定义一组范围。基于颜色RGB值在其各自范围内的位置,它将返回一些近似的颜色名称

例如,如果红色、绿色和蓝色都接近255,则在颜色名称的前面添加“Light”(如“Light Green”)


我还发现它接受随机颜色初始值设定项的枚举值。您可能还可以调整这些枚举以返回相应的字符串值,从而动态地形成颜色名称

这完全有可能!以下是Swift 3的基本解决方案:

  • 要预先定义颜色,请转到并使用HSV/HSB滑块来选择所需的每种颜色。从左开始定义每个滑块的范围。这是一点工作,但我们需要这些价值观。请注意以下范围:
  • 色调=0-360
    Sat=0-100
    Br=0-100

  • 在得到每个颜色范围的值之后,我们需要将色调值除以360,以便于快速使用。饱和度和亮度值需要除以100
  • 例如,如果我想定义蓝色,我在网站上采取的措施是

    H=179…240
    S=50…100
    B=60…100

    H=H/360
    S=S/100
    B=B/100

    H范围=0.497…0.667
    S范围=0.5…1.0
    B范围=0.6…1.0

    我在电子表格中预先定义了几种基本颜色:

  • 现在我们需要在代码中实现。创建这样的函数:

    func whichColor(color: UIColor) -> String{
    
    var (h,s,b,a) : (CGFloat, CGFloat, CGFloat, CGFloat) = (0,0,0,0)
    _ = color.getHue(&h, saturation: &s, brightness: &b, alpha: &a)
    
    print("HSB range- h: \(h), s: \(s), v: \(b)")
    
    var colorTitle = ""
    
    switch (h, s, b) {
    
    // red
    case (0...0.138, 0.88...1.00, 0.75...1.00):
        colorTitle = "red"
    // yellow
    case (0.139...0.175, 0.30...1.00, 0.80...1.00):
        colorTitle = "yellow"
    // green
    case (0.176...0.422, 0.30...1.00, 0.60...1.00):
        colorTitle = "green"
    // teal
    case (0.423...0.494, 0.30...1.00, 0.54...1.00):
        colorTitle = "teal"
    // blue
    case (0.495...0.667, 0.30...1.00, 0.60...1.00):
        colorTitle = "blue"
    // purple
    case (0.668...0.792, 0.30...1.00, 0.40...1.00):
        colorTitle = "purple"
    // pink
    case (0.793...0.977, 0.30...1.00, 0.80...1.00):
        colorTitle = "pink"
    // brown
    case (0...0.097, 0.50...1.00, 0.25...0.58):
        colorTitle = "brown"
    // white
    case (0...1.00, 0...0.05, 0.95...1.00):
        colorTitle = "white"
    // grey
    case (0...1.00, 0, 0.25...0.94):
        colorTitle = "grey"
    // black
    case (0...1.00, 0...1.00, 0...0.07):
        colorTitle = "black"
    default:
        print("empty def")
        colorTitle = "Color didn't fit defined ranges..."
    }
    
    return colorTitle
    }
    
  • 现在只需传递您要分析的颜色,它就会打印颜色的通用名称:

     print("Color: \(self.whichColor(color: YourColorSource!))")
    
    它不是完美的,无论谁想要使用它,都需要正确地使用范围来定义颜色之间的真实边界或实现更多颜色


    注意:电子表格中的某些值与Swift代码不匹配,因为我已将其调整为无间隙的连续颜色范围…

    这是完全可能的!以下是Swift 3的基本解决方案:

  • 要预先定义颜色,请转到并使用HSV/HSB滑块来选择所需的每种颜色。从左开始定义每个滑块的范围。这是一点工作,但我们需要这些价值观。请注意以下范围:
  • 色调=0-360
    Sat=0-100
    Br=0-100

  • 在得到每个颜色范围的值之后,我们需要将色调值除以360,以便于快速使用。饱和度和亮度值需要除以100
  • 例如,如果我想定义蓝色,我在网站上采取的措施是

    H=179…240
    S=50…100
    B=60…100

    H=H/360
    S=S/100
    B=B/100

    H范围=0.497…0.667
    S范围=0.5…1.0
    B范围=0.6…1.0

    我在电子表格中预先定义了几种基本颜色:

  • 现在我们需要在代码中实现。创建这样的函数:

    func whichColor(color: UIColor) -> String{
    
    var (h,s,b,a) : (CGFloat, CGFloat, CGFloat, CGFloat) = (0,0,0,0)
    _ = color.getHue(&h, saturation: &s, brightness: &b, alpha: &a)
    
    print("HSB range- h: \(h), s: \(s), v: \(b)")
    
    var colorTitle = ""
    
    switch (h, s, b) {
    
    // red
    case (0...0.138, 0.88...1.00, 0.75...1.00):
        colorTitle = "red"
    // yellow
    case (0.139...0.175, 0.30...1.00, 0.80...1.00):
        colorTitle = "yellow"
    // green
    case (0.176...0.422, 0.30...1.00, 0.60...1.00):
        colorTitle = "green"
    // teal
    case (0.423...0.494, 0.30...1.00, 0.54...1.00):
        colorTitle = "teal"
    // blue
    case (0.495...0.667, 0.30...1.00, 0.60...1.00):
        colorTitle = "blue"
    // purple
    case (0.668...0.792, 0.30...1.00, 0.40...1.00):
        colorTitle = "purple"
    // pink
    case (0.793...0.977, 0.30...1.00, 0.80...1.00):
        colorTitle = "pink"
    // brown
    case (0...0.097, 0.50...1.00, 0.25...0.58):
        colorTitle = "brown"
    // white
    case (0...1.00, 0...0.05, 0.95...1.00):
        colorTitle = "white"
    // grey
    case (0...1.00, 0, 0.25...0.94):
        colorTitle = "grey"
    // black
    case (0...1.00, 0...1.00, 0...0.07):
        colorTitle = "black"
    default:
        print("empty def")
        colorTitle = "Color didn't fit defined ranges..."
    }
    
    return colorTitle
    }
    
  • 现在只需传递您要分析的颜色,它就会打印颜色的通用名称:

     print("Color: \(self.whichColor(color: YourColorSource!))")
    
    它不是完美的,无论谁想要使用它,都需要正确地使用范围来定义颜色之间的真实边界或实现更多颜色


    注意:电子表格中的某些值与Swift代码不匹配,因为我已将其调整为连续的颜色范围,没有间隙…

    如果颜色是随机的,则没有“名称”。请定义“颜色名称”!你有命名颜色的列表吗?如果颜色是随机的,它没有“名称”。定义“颜色名称”!您有命名颜色列表吗?接近255的FYI-RGB值为“亮”,而不是“暗”。接近255的FYI-RGB值为“亮”,而不是“暗”。