Как убрать эффект «размытия», который Какао добавляет к прозрачным листам? - PullRequest
2 голосов
/ 06 августа 2010

По умолчанию Cocoa добавляет эффект размытия фона к прозрачным и полупрозрачным модальным листам, когда они применяются к окну. Я хотел бы отключить эффект размытия. Как мне это сделать?

Я создал пользовательский лист (подкласс NSWindow с прозрачным фоном и некоторыми элементами управления в нем). Я могу отобразить его, используя стандартный метод beginSheet следующим образом:

[NSApp beginSheet:myCustomSheet
   modalForWindow:mainWindow
    modalDelegate:self
   didEndSelector:...];

Лист отображается нормально, но все за ним размыто.

Примечание 1: Я пишу полностью настроенный пользовательский интерфейс для приложения с сенсорным экраном или киоском, поэтому ни одно из обычных руководств по пользовательскому интерфейсу Apple не применяется.

Примечание 2: I do хочу посмотреть, что находится под листом. Как указывало SirRatty , можно заблокировать размытую часть, заполнив фон. В моем случае я хочу, чтобы фон был хорошо виден, без размытия.

Ответы [ 3 ]

6 голосов
/ 06 августа 2010

Существует частный вызов API, который можно использовать для установки фильтра CI на фоне окна:

http://www.mail-archive.com/cocoa-dev@lists.apple.com/msg16280.html

Также есть CGSRemoveWindowFilter:

extern CGError CGSRemoveWindowFilter(CGSConnectionID cid, CGSWindowID wid, CGSWindowFilterRef filter);

Просто имейте в виду, что применяются обычные предупреждения частного API (могут исчезнуть или измениться в будущем и т. Д.).

1 голос
/ 06 августа 2010

Вы можете написать собственные подпрограммы анимации листа, которые отображают ваше собственное окно NSWindow и закрашивают фон окна полупрозрачным цветом.Я не уверен, повлияет ли setAlphaValue: для NSWindow на непрозрачность дочерних элементов.Если это влияет на них, вы можете использовать setBackgroundColor: и предоставить цвет фона окна по умолчанию, но с альфа-компонентом, это не должно влиять на дочерние элементы.

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

1 голос
/ 06 августа 2010

Что я сделал:

В IB добавьте настраиваемый NSView размера окна в окно внизу иерархии представления содержимого. Установите класс объекта в MySolidView (или любой другой.)

В Xcode класс MySolidView делает только одно: при -drawRect он заполнит вид сплошным цветом. (например, светло-серый).

...