以前曾经问过,但我还没有找到令人满意的答案。是否真的没有办法为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?
答案 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];