在 Swift 中应用混合模式

Posted

技术标签:

【中文标题】在 Swift 中应用混合模式【英文标题】:Applying Blend Modes in Swift 【发布时间】:2015-07-06 09:10:16 【问题描述】:

我要做的是将纯白色背景的this 图标转换为混合背景的this 图标。

图标背后的背景并不重要,我想要实现的是应用于图标的效果。该图标是使用 Photoshop 中的Soft Light 混合模式创建的。我想在 ios 中重新创建它。

这是我尝试过的代码,灵感来自this comment:

@IBOutlet weak var cogButton: UIButton!

func applyCogBackground() 
    UIGraphicsBeginImageContextWithOptions(cogButton.frame.size, false, 1)
    var context = UIGraphicsGetCurrentContext()
    view.drawViewHierarchyInRect(cogButton.bounds, afterScreenUpdates: false)
    UIImage(named: "Cog")?.drawInRect(cogButton.bounds, blendMode: kCGBlendModeSoftLight, alpha: 1)
    var result = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    cogButton.setBackgroundImage(result, forState: .Normal)


我使用drawHierarchyInRect() 而不是CALayer.renderInContext(),因为有人告诉我它的性能要快得多。无论如何,任何一种方式最终都会得到相同的结果。图标未更改(它保留其纯白色背景)。我做错了什么?

【问题讨论】:

【参考方案1】:

您可以尝试为按钮的图像应用不同的渲染模式。

cogButton.setBackgroundImage(UIImage(named:"Cog")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate), forState: .Normal)

【讨论】:

不幸的是,这只会导致this :( 谢谢你的尝试。

以上是关于在 Swift 中应用混合模式的主要内容,如果未能解决你的问题,请参考以下文章

Blend混合模式 与 20余种颜色混合模式代码实现

FlutterFlutter 混合开发 ( Dart 代码调试 | Flutter 单独调试 | 混合模式下 Flutter 调试 )

GraphQL 中模式级和应用级错误的混合

chrome中的Chrome css3混合混合模式错误

如何在 iPhone 上以调试/开发模式运行我的混合移动应用程序?

在生产模式下播放框架2.3.8混合内容