При изменении положения док-станции Какао запускает NSApplicationDidChangeScreenParametersNotification:
Проблема в том, что что касается Apple Docs, его следует поднимать только тогда, когда
Отправляется при изменении конфигурации дисплеев, подключенных к компьютеру. Изменение конфигурации может быть выполнено программно или когда пользователь изменяет настройки на панели управления дисплеями. Объектом уведомления является sharedApplication. Это уведомление не содержит словаря userInfo.
Поэтому, если вы хотите обновить окна своего приложения при подключении нового дисплея (например, при изменении / перемещении рамки какого-либо окна HUD и т. Д.), Вы получите поддельное уведомление, приходящее на док. Кроме того, к этому уведомлению не прикреплен словарь userInfo, поэтому у меня не было возможности проверить, когда была док-станция или новый контроллер дисплея.
Итак, как с этим справиться?
Возможное решение - проверить размер [NSScreen mainScreen] при срабатывании уведомления. Если этот размер NSSize изменяется, это уведомление приходит с нового подключенного дисплея, а не с док-станции:
static NSSize mainScreenSize;
-(void)handleApplicationDidChangeScreenParameters:(NSNotification *)notification {
NSSize screenSize = [[NSScreen mainScreen] frame].size;
if( screenSize.width != mainScreenSize.width || screenSize.height != mainScreenSize.height ) { // screen size changed
mainScreenSize = [[NSScreen mainScreen] frame].size;
[myWindowController updateContent];
[[myWindow contentView] setNeedsDisplay:YES]; // update custom window
}