UIKit 加法混合

use*_*931 5 blending opengl-es uikit ios

以前曾有人问过这个问题,但我还没有找到满意的答案。难道真的没有办法为UIView设置混合模式(即使用GPU合成来实现混合)吗?

有一些使用 CGContextSetBlendMode 的建议,如下所示:在不使用 OpenGL 的情况下以加法混合模式绘制图像,但到目前为止我偶然发现的所有这些解决方案似乎都使​​用绘图例程,据我所知(并且据我的性能测量暗示)这将在 CPU 上进行混合(然后才将其上传到 OpenGL 纹理进行显示)。

但据我所知,UIKit 使用 OpenGL 来呈现底层 CALayers,因此使用单独的混合模式应该是世界上最简单的事情。

自 IOS 5 以来,似乎还有一些粒子系统http://www.raywenderlich.com/6063/uikit-article-systems-in-ios-5-tutorial也支持添加混合(我怀疑这种混合是否已实现)在 CPU 上) - 那么现在是否有一种方法可以在显示 UIView 时使用附加(或其他类型)混合?

小智 1

iOS 7 引入了一个新的 Layer 类,称为 CABackdropLayer。背景层从层次结构中位于其下方的 UIView 获取其图像。这是 Apple 在控制中心、通知中心、密码、拨号盘等中用于加深和叠加效果以及霜冻/高斯模糊视图的图层类型。

要使用这种类型的图层,请像这样子类化 UIView......

@interface MyBackdropView : UIView
@end

@implementation MyBackdropView
+ (Class)layerClass {
    return [CABackdropLayer class];
}
Run Code Online (Sandbox Code Playgroud)

有一些私有 API 方法可以将此功能添加到现有的 UIViews 中,但它们对于 App Store 来说并不安全......

UIView *blendedView = [[UIView alloc] initWithFrame:frame];
[blendedView _setDrawsAsBackdropLayerWithBlendMode:kCGBlendModeColorBurn];
Run Code Online (Sandbox Code Playgroud)