Как я могу удалить эффект "размытия", который Какао добавляет к прозрачным листам?

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

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

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

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

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

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

3 ответа

Существует частный вызов 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 (могут исчезнуть или измениться в будущем и т. Д.).

Что я сделал:

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

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

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

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

Другие вопросы по тегам