2013-09-05 51 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