2013-09-05 54 views
3

这已被问过,但我没有找到一个令人满意的答案呢。是否真的没有办法为UIView设置混合模式(也就是说,使用GPU合成来实现混合)。UIKit添加剂混合

有一些建议使用像这里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时混合?

回答

1

iOS 7引入了一个名为CABackdropLayer的新类。背景层从它下面的UIView中获取它的图像。这是苹果公司在控制中心,通知中心,密码,拨号盘等以及霜/高斯模糊视图中用于其刻录和覆盖效果的图层类型。

要使用这种类型的层,子类的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]; 
+0

现在是'-_setDrawsAsBackdropOverlayWithBlendMode:'在[8/9的iOS(https://github.com/JaviSoto/iOS9-Runtime-Headers/blob/master/Frameworks/ UIKit.framework/UIView.h) –

+0

那么AppStore的安全选项是什么? – fatuhoku