Я просматриваю учебник по рисованию пользовательского [фигурного] окна с помощью какао путем создания подкласса NSWindow.

В руководстве указано, что разработчик инициализатора должен сделать следующее:

[self setOpaque:NO];
[self setBackgroundColor:[NSColor clearColor]];

Мне интересно, в чем разница между этими двумя сообщениями и зачем они нужны оба , поскольку их результат одинаков.

Ссылки: руководство можно найти здесь .

4
Eimantas 26 Сен 2009 в 11:17

2 ответа

Лучший ответ

Я предполагаю, что первое сообщение требуется, потому что система рисования должна знать, следует ли ей беспокоиться об обновлении представлений, которые лежат за вами. Например, если окно в другом приложении (за вашим окном) обновляется (например, появляется текст и т. Д.), Оконной системе обычно не нужно его перерисовывать, но, поскольку ваше окно прозрачное, в этом случае она это делает.

9
Ira Cooke 26 Сен 2009 в 11:57
2
+1. В непрозрачных окнах вы используете [self setOpaque:YES]; для ускорения рисования.
 – 
Abizern
26 Сен 2009 в 14:10

Мне интересно, в чем разница между этими двумя сообщениями и зачем они нужны оба , поскольку их результат одинаков.

Они не такие.

Посмотрите документацию по свойству opaque: это то, как вы сообщаете NSView, что собираетесь рисовать во всех своих границах, полностью покрывая все, что находится ниже вашего представления.

Если вы не покрываете все границы или не всегда рисуете с непрозрачностью 100%, тогда ваше представление не непрозрачно, и вам следует оставить это свойство установленным на NO.

Если вы установите цвет фона вашего представления на clearColor (который представляет собой просто цвет с непрозрачностью 0%) и не рисуете с непрозрачностью 100% по всему фону, то ваше представление не будет непрозрачным.

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

4
Peter Hosey 3 Мар 2013 в 03:29