草庐IT

swift - 在 Swift 中混合 UIColors

coder 2023-09-04 原文

我有两个 SKSpriteNode,它们的颜色定义如下:

colorNode[0].color = UIColor(red: 255, green: 0, blue: 0, alpha: 1)
colorNode[1].color = UIColor(red: 0, green: 255, blue: 0, alpha: 1)

我想要第三个 SKSpriteNode 混合前两个 SKSpriteNode 着色,结果应该是这样的:

colorNode[2].color = UIColor(red: 255, green: 255, blue: 0, alpha: 1)

但是有没有办法添加两个 UIColors ?像这样:

colorNode[2].color = colorNode[0].color + colorNode[1].color

最佳答案

这样的事情怎么样:

func addColor(_ color1: UIColor, with color2: UIColor) -> UIColor {
    var (r1, g1, b1, a1) = (CGFloat(0), CGFloat(0), CGFloat(0), CGFloat(0))
    var (r2, g2, b2, a2) = (CGFloat(0), CGFloat(0), CGFloat(0), CGFloat(0))

    color1.getRed(&r1, green: &g1, blue: &b1, alpha: &a1)
    color2.getRed(&r2, green: &g2, blue: &b2, alpha: &a2)

    // add the components, but don't let them go above 1.0
    return UIColor(red: min(r1 + r2, 1), green: min(g1 + g2, 1), blue: min(b1 + b2, 1), alpha: (a1 + a2) / 2)
}

func multiplyColor(_ color: UIColor, by multiplier: CGFloat) -> UIColor {
    var (r, g, b, a) = (CGFloat(0), CGFloat(0), CGFloat(0), CGFloat(0))
    color.getRed(&r, green: &g, blue: &b, alpha: &a)
    return UIColor(red: r * multiplier, green: g * multiplier, blue: b * multiplier, alpha: a)
}

定义运算符以添加颜色并将颜色乘以 Double:

func +(color1: UIColor, color2: UIColor) -> UIColor {
    return addColor(color1, with: color2)
}

func *(color: UIColor, multiplier: Double) -> UIColor {
    return multiplyColor(color, by: CGFloat(multiplier))
}

然后你可以像这样混合颜色:

// Make orange with 50% red and 50% yellow    
let orange = .red * 0.5 + .yellow * 0.5

// Make light gray with 25% black and 75% white
let lightGray = .black * 0.25 + .white * 0.75

// Make sky blue by lightening a combination of 25% blue and 75% cyan
let skyBlue = (.blue * 0.25 + .cyan * 0.75) * 0.25 + .white * 0.75

// Make dark red by combining 50% red and 50% black
let darkRed = .red * 0.50 + .black * 0.50

// Make purple from 60% blue and 40% red
let purple = (.blue * 0.60 + .red * 0.40)

// Then make lavender from 25% purple and 75% white
let lavender = purple * 0.25 + .white * 0.75

关于swift - 在 Swift 中混合 UIColors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27342715/

有关swift - 在 Swift 中混合 UIColors的更多相关文章

  1. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  2. ruby - 如何测试正在使用 RSpec 和 Mocha 调用的混合类方法? - 2

    我有一个模块:moduleMyModuledefdo_something#...endend由类使用如下:classMyCommandextendMyModuledefself.execute#...do_somethingendend如何验证MyCommand.execute调用了do_something?我已经尝试使用mocha进行部分模拟,但是当未调用do_something时它不会失败:it"callsdo_something"doMyCommand.stubs(:do_something)MyCommand.executeend 最佳答案

  3. ruby-on-rails - 为什么 DataMapper 使用混合与继承? - 2

    所以我只是对此感到好奇:DataMapper为其模型使用混合classPostincludeDataMapper::Resource虽然active-record使用继承classPost有谁知道为什么DataMapper选择这样做(或者为什么AR选择不这样做)? 最佳答案 它允许您从另一个不是DM类的类继承。它还允许动态地将DM功能添加到类中。这是我正在处理的模块中的类方法:defdatamapper_classklass=self.dupklass.send(:include,DataMapper::Resource)klass

  4. ruby-on-rails - 将 Ruby 代码和文字标记与 Haml 混合 - 2

    如何用HAML编写这个ERB:#OR我可以:=some_ruby_code+":"#and=some_ruby_code%br但我不想在这里连接,我想将它写成内联:(=some_ruby_code):#and(=some_ruby_code)%br 最佳答案 =some_ruby_code+":"-#and=some_ruby_code+""编辑1:我不确定您在寻找什么。你想要其中之一吗?==#{some_ruby_code}:-#and==#{some_ruby_code}或==#{some_ruby_code}:-#and=so

  5. ruby - 如何从 Sass 混合方程中删除测量单位? - 2

    我编写了一个非常简单的Sassmixin,用于将像素值转换为rem值(请参阅JonathanSnook的articleonthebenefitsofusingrems)。这是代码://MixinCode$base_font_size:10;//10px@mixinrem($key,$px){#{$key}:#{$px}px;#{$key}:#{$px/$base_font_size}rem;}//Includesyntaxp{@includerem(font-size,14);}//RenderedCSSp{font-size:14px;font-size:1.4rem;}这个mixi

  6. ruby - 如何对数组的所有元素执行 bool 运算并将结果混合在一起? - 2

    我想AND或OR数组中的所有元素,但要有一些控制,如散列元素选择所示。这是我希望实现的行为:a=[{:a=>true}­,{:a=>false­}]a.and_map{|hash_element|hash_element[:a]}#=>falsea.or_map{|hash_element|hash_element[:a]}#=>true在Ruby中是否有一种巧妙、干净的方法来做到这一点? 最佳答案 您可以为此使用all?和any?:a=[{:a=>true},{:a=>false}]a.any?{|hash_element|has

  7. ruby - Prawn PDF表格混合格式 - 2

    我正在尝试使用prawnpdf在ruby​​中生成一个简单的表格。我需要单元格中的一些文本是粗体,而一些不是粗体。例如:现在按照一些示例,我使用以下代码进行了基本的表格渲染:pdf.table([["1.Rowexampletext","433"],["2.Rowexampletext","2343"],["3.Rowexampletext","342"],["4.Rowexampletext","36"]],:width=>500,:cell_style=>{:font_style=>:bold})但我完全看不出有什么办法可以用不同的格式将更多文本插入到第一个单元格中。(在这种情况下

  8. ruby-on-rails - 我们是否将 Rails ActiveRecord 用作混合结构,即数据结构 + 对象? - 2

    我使用Rails已经4年多了,所以很明显我喜欢Rails并且喜欢按照Rails方式做事,但有时我会在不知不觉中陷入阴暗面。我最近学习了UncleBob的CleanCode。我在看第6章,有点困惑我们作为Rails开发人员是否违反了OO设计的最基本规则,即Demeter法则或封装?得墨忒耳法则指出,一个对象不应该知道另一个对象的内部结构,也不应该调用方法返回的对象的方法,因为当你这样做时,它表明一个对象对另一个对象了解太多。但我们经常从一个模型中调用另一个对象的方法。例如,当我们有像“订单属于用户”这样的关系时。然后很多时候我们最终会执行order.user.name或者为了防止它看起来

  9. ruby-on-rails - 混合 ActiveRecord 查找条件 - 2

    我想根据created_on>=somedateANDnameINsomelistofnames的组合查找记录。对于“>=”,我必须使用sql条件。对于“IN”,我必须使用条件散列,其中键是:name,值是名称数组。有没有办法将两者结合起来? 最佳答案 您可以在rails2.1及更高版本中使用命名作用域ClassTest"created_on>2005-01-01"named_scope:named_fred,:conditions=>{:name=>"fred"}end那么你可以做Test.created_after_2005.n

  10. ruby - 如何将模块混合到 rspec 上下文中 - 2

    如何将模块混合到rspec上下文(也称为describe),以便模块的常量可用于规范?moduleFooFOO=1enddescribe'constantsinrspec'doincludeFoopconst_get(:FOO)#=>1pFOO#uninitializedconstantFOO(NameError)endconst_get可以在常量名称不能检索常量的情况下检索常量,这很有趣。是什么导致了rspec的奇怪行为?我正在使用MRI1.9.1和rspec2.8.0。症状同MRI1.8.7。 最佳答案 你想要extend,而不

随机推荐