Воспроизвести экран, скользящий в сторону, как Центр уведомлений в Mountain Lion?

По сути, я хочу, чтобы весь рабочий стол OS X (или, в идеале, все, кроме строки меню) скользил вверх и показывал мое собственное представление в нижней части почти так же, как работает Центр уведомлений в Mountain Lion (только снизу, а не с правая сторона).

Я немного огляделся, но я немного в недоумении, с чего начать. NSScreen дает мне рамку главного экрана, но нет возможности получить какой-либо NSWindow для всего рабочего стола (или что-то подобное). Таким образом, сам рабочий стол, док-станция и любые открытые окна будут сдвигаться вверх, когда мой вид становится видимым.

Помощь? :)


person Christian A. Strømmen    schedule 28.07.2012    source источник
comment
Справедливо спросить, возможно ли это, но, вероятно, нет. Это потребовало бы, чтобы приложение взяло под контроль систему таким образом, который Apple обычно не одобряет.   -  person benzado    schedule 30.07.2012


Ответы (2)


Лучшей идеей, которую я могу придумать, было бы создать NSWindow размером с рабочий стол (за вычетом панели инструментов) плюс ваш контент, который можно рассчитать с помощью NSScreen, как вы сказали ранее. Затем вы можете поиграть с окном и отключить тени, установить стиль окна на NSBorderlessWindowMask и правильно установить уровень окна. Вам также нужно будет установить фон Windows на обои рабочего стола пользователя. Неофициальным способом сделать это было бы чтение из plist /Users/<current-user>/Library/Preferences/com.apple.desktop.plist. После этого вы можете использовать [[mywindow animator] setFrame:NSMakeFrame(...)], чтобы «сдвинуть» окно наружу, повторяя внешний вид Центра уведомлений. Даже если это сработает, вам следует подумать, действительно ли это необходимо. Копирование функций (и не точное их выполнение) может в конечном итоге сбить пользователя с толку и, как правило, нарушает части Руководство по пользовательскому интерфейсу Apple.

person nosedive25    schedule 28.07.2012
comment
Итак, замена рабочего стола? Но тогда док-станция не двигалась, и никакие окна не открывались, и значков на рабочем столе не было. Или я вас неправильно понимаю? Кроме того, это в основном для концепции и меньше для реального производственного приложения. В зависимости от того, как получится в итоге, и насколько хакерским будет решение. - person Christian A. Strømmen; 28.07.2012
comment
О, извините, я забыл, что док должен был двигаться. Я все равно не вижу, как создать этот эффект, так как с док-станцией будет сложно работать. Тем не менее, вы можете сделать сумасшедшую анимацию снимков экрана, чтобы имитировать движение дока. - person nosedive25; 31.07.2012
comment
@ nosedive25 Ну, существуют приложения, которые могут сделать такой снимок экрана со всем рабочим столом. Таким образом, теоретически должно быть возможно передать этот вывод в окно без полей в режиме реального времени. (Стоит ли это усилий и снижения производительности — это совершенно другой вопрос. Тем более, что я не знаю, доступен ли захват экрана в качестве удобного промежуточного программного обеспечения.) - person millimoose; 31.12.2012

Вы обязательно должны взглянуть на:

http://www.cocoacontrols.com/platforms/ios/controls/cnbackstagecontroller

вместо того, чтобы показывать обычное окно и строку меню, сборка приложения с CNBackstageController предлагает вам рабочий стол, похожий на Finder, и будет отображаться с плавной анимацией. Обычное использование — это приложение, вложенное в виде элемента строки состояния, которое не отображается в Dock.

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

person cocoa coder    schedule 15.11.2012
comment
Это просто скриншот, но то же самое и с Центром уведомлений. Тем не менее, спасибо, что упомянули об этом. Мне это тоже помогло. - person Jens Kohl; 07.05.2013
comment
если это было полезно для вас, подумайте о том, чтобы сделать это ответом, потому что я думаю, что это проще, чем копировать его вручную самостоятельно - person cocoa coder; 09.05.2013
comment
Я не владелец вопроса, поэтому я могу сделать его ответом… - person Jens Kohl; 13.05.2013