2016-06-06 1 views
0

я пишу окно и два подвидов, то DrawRect верхнего подвида, как:osx: Я установил один subview alpha, но все его супер-представления были альфа?

[[[NSColor redColor] colorWithAlphaComponent:0.5] set]; 
NSRectFill(NSMakeRect(100, 100, 200, 200)); 

и дно подтаблица представляет собой вид изображения. Но когда я запустил, я обнаружил, что все виды и окна являются альфа, верхнее подвью будет отображать рабочий стол с цветом.

Кто-нибудь знает причину? Спасибо за помощь.


Структура моего кода, как это: windowController включает в себя: окно и ViewController. viewcontroller включает в себя view1 и view2. view1 - изображение. view2 Я ничего не пишу, просто переопределите drawRect с кодами раньше.

Я уже писал об этом раньше, но не встречал эту проблему, поэтому я действительно смущен.

Когда я проверяю иерархию пользовательского интерфейса представления, я нашел, что это правильно.


я воспроизвел эту проблему в моем тестовом проекте, это мой тестовый проект:

В AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
TestViewController *controller = [[TestViewController alloc] initWithFrame:NSMakeRect(0, 0, self.window.frame.size.width, self.window.frame.size.height)]; 
[self.window setBackgroundColor:[NSColor blueColor]]; 
[self.window setContentView:controller.view]; 

}

В TestViewController

- (instancetype)initWithFrame:(NSRect)frame { 
self = [super init]; 
if (self) { 
    TestView *view = [[TestView alloc] initWithFrame:frame]; 
    self.view = view; 
} 
return self; 

}

В TestView

- (void)drawRect:(NSRect)dirtyRect { 
[super drawRect:dirtyRect]; 

// Drawing code here. 
[[[NSColor redColor] colorWithAlphaComponent:0.5] set]; 
NSRectFill(dirtyRect); 

}

и с учетом иерархии пользовательского интерфейса: enter image description here

И запустить enter image description here

наконец, только красный цвет, но BackgroundColor окна синего цвета.

+0

«Я нашел все виды и окна альфа» Это не английский. Что это значит? –

+0

Установили ли вы цвет фона в окне? Если да, то к чему? Неправильно ли ваше представление возвращает 'YES' из переопределения' -isOpaque'? Вы используете вибрацию? Можете ли вы воспроизвести проблему с новым проектом с помощью этого пользовательского представления? –

+0

@ElTomato извините за мой плохой английский, я имею в виду, что верхний вид показывает рабочий стол напрямую, без нижнего изображения. – melody5417

ответ

0

я изменю

NSRectFill 

в

NSRectFillUsingOperation(dirtyRect, NSCompositeSourceOver); 

Затем поворачивает вправо.