2012-06-13 4 views
4

Я понимаю, как рисовать внутри NSWindow frame. Но я не понимаю, как добиться чего-то вроде этого, например:Рисунок за пределами NSWindow

Taken from a time tracking app called Eon

Если бы я знал, как это называется, я мог бы исследовать этот вопрос дальше, но так как я не знаю, что к искать, это невозможно.

Я ценю любой намек.

Большое спасибо.

+0

Я не уверен, если это то, что вы имеете в виду, но пока вы не обрезаете представление, вы можете рисовать вне его границ. Например, тени рисуются таким образом. – Matthias

+0

Итак, я мог выбирать координаты за рамкой окна и просто рисовать там? Это легко * легко? – pbx

+0

Хотя вы можете просто рисовать вне NSView, как предлагает Маттиас, я не думаю, что этот подход будет работать на NSWindow. –

ответ

6

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

Посмотрите на документацию, чтобы увидеть, если это то, что вы хотите: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Drawers/Drawers.html#//apple_ref/doc/uid/10000001-BABFIBIA

Тумбы легко настроить. Однако, хотя у вас есть полный контроль над содержимым внутри ящика, вы не имеете большого контроля над тем, как выглядит граница без использования частных API (например, оборванных краев на снимке экрана). Если вы хотите получить больше контроля, вы можете использовать дочернее окно без полей.

Вот учебник, который делает без полей, полностью настраиваемого окна: http://cocoawithlove.com/2008/12/drawing-custom-window-on-mac-os-x.html

Затем, вы можете «прикрепить» пользовательское окно родительского окна с -[NSWindow addChildWindow:ordered:]. Это позволит дочернему окну следовать за родительским окном при его перемещении. Вам все равно придется самостоятельно реагировать на изменения размера родительского окна и, возможно, некоторых других свойств.

+0

Большое спасибо. Это был действительно хороший намек! – pbx

Смежные вопросы