Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa Dock激发非应用程序IDChangeScreen参数通知_Cocoa_Dock_Nsapplication - Fatal编程技术网

Cocoa Dock激发非应用程序IDChangeScreen参数通知

Cocoa Dock激发非应用程序IDChangeScreen参数通知,cocoa,dock,nsapplication,Cocoa,Dock,Nsapplication,更改停靠位置时,Cocoa正在触发NSApplicationIDChangeScreen参数提示: 问题是,至于,只有在 在连接到计算机的显示器配置时发布 改变了。配置更改可以通过以下两种方式进行: 以编程方式或当用户更改显示中的设置时 控制面板通知对象是sharedApplication。这 通知不包含userInfo字典 因此,如果您想在附加新显示器时更新应用程序窗口(例如,更改/移动某个HUD窗口的框架等),您将收到来自dock的假通知。 此外,此通知没有附加userInfo字典,因此我没

更改停靠位置时,Cocoa正在触发NSApplicationIDChangeScreen参数提示:

问题是,至于,只有在

在连接到计算机的显示器配置时发布 改变了。配置更改可以通过以下两种方式进行: 以编程方式或当用户更改显示中的设置时 控制面板通知对象是sharedApplication。这 通知不包含userInfo字典

因此,如果您想在附加新显示器时更新应用程序窗口(例如,更改/移动某个HUD窗口的框架等),您将收到来自dock的假通知。 此外,此通知没有附加userInfo字典,因此我没有机会检查dock或新的显示控制器

那么如何处理呢

一种可能的解决方案是在发出通知时检查[NSScreen mainScreen]大小。 如果此NSSize更改,则该通知来自连接的新显示器,而不是来自dock:

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

}

触发通知是因为主屏幕的
可视框架
(不包括停靠占用的空间)取决于停靠的位置


因此,如果主屏幕的
visibleFrame
发生变化,您可以确定该通知是移动坞的结果。

该通知被触发,因为主屏幕的
visibleFrame
(不包括坞占用的空间)取决于坞的位置

因此,如果主屏幕的
visibleFrame
发生更改,您可以确定通知是由于移动了停靠点