UIKit添加剂混合

时间:2013-09-05 13:25:03

标签: ios opengl-es uikit blending

以前曾经问过,但我还没有找到令人满意的答案。是否真的没有办法为UIView设置混合模式(也就是说,使用GPU合成来实现混合)。

有一些使用CGContextSetBlendMode的建议,如下所示:Draw an image in Additive Blend Mode without using OpenGL但到目前为止我偶然发现的所有这些解决方案似乎都使​​用绘图程序,据我所知(并且就我的表现指标提示)这将是在CPU上进行混合(然后才将其上传到OpenGL纹理进行显示)。

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

因为IOS 5似乎也有一些粒子系统http://www.raywenderlich.com/6063/uikit-particle-systems-in-ios-5-tutorial也支持添加剂混合(我怀疑这种混合是在CPU上实现的) - 所以现在可能有一种使用添加剂的方法(或其他类型的)混合显示UIViews?

2 个答案:

答案 0 :(得分:2)

您可以使用compositingFilter

view.layer.compositingFilter = "colorDodgeBlendMode"

其他一些有效值:

“ normalBlendMode”,“ darkenBlendMode”,“ multiplyBlendMode”,“ colorBurnBlendMode”,“ lightenBlendMode”,“ screenBlendMode”,“ colorDodgeBlendMode”,“ overlayBlendMode”,“ softLightBlendMode”,“ hardLightBlendModeclusion”,“ differentBlendMode”,“

答案 1 :(得分:1)

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

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

@interface MyBackdropView : UIView
@end

@implementation MyBackdropView
+ (Class)layerClass {
    return [CABackdropLayer class];
}

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

UIView *blendedView = [[UIView alloc] initWithFrame:frame];
[blendedView _setDrawsAsBackdropLayerWithBlendMode:kCGBlendModeColorBurn];