Как я могу удалить эффект "размытия", который Какао добавляет к прозрачным листам?
По умолчанию 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:
и предоставить цвет фона окна по умолчанию, но с альфа-компонентом, это не должно влиять на дочерние элементы.
Я полагаю, что одна из проблем разработки / проектирования вашего собственного пользовательского интерфейса - это когда вам нужно переопределить колесо только для незначительной настройки. По крайней мере, если вы напишите это самостоятельно, вы будете в большей степени контролировать их настройку в будущем.