2013-09-05 4 views
3

Это было задано раньше, но я еще не нашел удовлетворительного ответа. Не существует способа установить blendmode для 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, которые также поддерживают смешивание добавок (и я сомневаюсь, что это смешение реализовано на процессоре) - так может быть, теперь есть способ использовать добавку (или другие виды) смешивания при отображении UIViews?

ответ

1

В iOS 7 появился новый класс Layer под названием CABackdropLayer. Уровень фонового изображения получает свое изображение из UIView ниже его в иерархии. Это тип слоя, который Apple использует для своих эффектов Burn и Overlay в Центре управления, Notification Center, Passcode, Dial Pad и т. Д., А также в режимах размытия мороза/гауссова.

Чтобы использовать этот тип слоя, подкласс 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:' в [IOS 8/9] (https://github.com/JaviSoto/iOS9-Runtime-Headers/blob/master/Frameworks/ UIKit.framework/UIView.h) –

+0

Ну что такое безопасный вариант AppStore для этого? – fatuhoku

Смежные вопросы