在不混合的情况下使不透明的 UIView 变暗
Posted
技术标签:
【中文标题】在不混合的情况下使不透明的 UIView 变暗【英文标题】:Darken an opaque UIView without blending 【发布时间】:2014-10-13 17:14:52 【问题描述】:我的应用程序的背景是不透明的UIImageView
。在某些情况下,我想以动画方式将其从全亮度调暗到大约 50%。目前我降低了视图的 alpha 属性,这很好用。因为视图后面没有任何东西,所以背景图像只是变暗了。
但是,我一直在使用 Core Animation Instrument 进行分析,当我这样做时,我看到 整个背景显示为混合。如果可能的话,我想避免这种情况。
在我看来,这在合成过程中是可以实现的。如果视图是不透明的,则可以将其与黑色混合,而没有任何东西在后面透出。不需要混合,调整像素值即可。
我想知道这是否是 UIKit 的 GPU 合成支持的东西。虽然混合不是很好,但它可能比在 CPU 上更新图像要好得多,所以我认为 CPU 方法可能不是一个好的替代品。
Another question 询问了这个问题,并提出了一些想法,包括设置 Alpha。不过,没有人提出一种避免混合的机制。
【问题讨论】:
【参考方案1】:这里的一个重要问题是,您是否希望更改为使用深色背景进行动画处理。
没有动画
准备两个不同的背景图像,然后在它们之间简单地交换。 UIImage+imageEffects
库可以帮助生成变暗的图像,或者给你一些线索。
动画。
看看GPUImage - “基于 GPU 的图像和视频处理的开源 ios 框架”。基于此,您可以将背景以较暗的方式渲染到场景中。
【讨论】:
动画。我应该提到这一点,所以我编辑了这个问题,感谢您提示我澄清。我看不出链接库有什么帮助? 我看了一下实现代码,谢谢。我还应该更清楚地说明我想将这一切都保留在 GPU 上。我已经修改过了。 @Benjohn,在这种情况下,请看一下这个框架 - “基于 GPU 的图像和视频处理的开源 iOS 框架”。 github.com/BradLarson/GPUImage 酷——这看起来像是一个有用的参考。我想知道我是否可以只使用一些 GLSlang 来定义背景如何组合在一起,然后我就可以一次完成整个事情并避免大量合成(它比我暗示的要复杂)。我认为这是正确的答案,我想我会把它留给 1.1 版 :-) 感谢您的编辑 - 我已经进一步构建它,使动画/非动画差异清晰。我打算暂时搁置这个问题,因为我希望有人会站出来说:“哦,你需要UIView
上的 ... 参数”。谢谢。以上是关于在不混合的情况下使不透明的 UIView 变暗的主要内容,如果未能解决你的问题,请参考以下文章
如何在不删除 Ionic 3 的情况下使 iOS 上的状态栏透明?
使 UIView 或 CALayer 变暗的最快方法(性能方面)