使NSViews和NSWindows有固定的位置

时间:2012-04-28 19:07:21

标签: objective-c xcode cocoa nsview

我试图让我的NSViews和我以编程方式创建的窗口有一个固定的位置,无论我的屏幕分辨率是多少,无论我连接到我的主桌面有多少显示器。例如,如果我有一个外部显示器或者如果我决定更改我的屏幕分辨率,我希望我的NSView或NSWindow的NsRect始终出现在同一个地方。这会有用吗?

NSRect mainFrame = [[NSScreen mainScreen] frame]
NSRect helpFrame = NSZeroRect;
helpFrame.origin.x = (mainFrame.size.width - width) / 2.0;
无论分辨率是多少,

是否会将窗口的x值始终放在中心?我觉得当我连接外部显示器时,分辨率会发生变化,屏幕中间不再是我想要的位置。 NSScreen mainScreen是否适合召唤?谢谢!

1 个答案:

答案 0 :(得分:1)

首先,你所要求的是含糊不清的。 “同一个地方”是什么意思?

您没有显示width是什么。假设它是窗口的宽度,您显示的内容将计算一个X位置,该位置使窗口在“主”屏幕上水平居中。但是,-mainScreen可能不符合您的想法。如果您想要主显示,带有菜单栏的显示,则需要[[NSScreen screens] objectAtIndex:0]

但是,即使您使用显示的计算设置窗口的帧,如果屏幕配置发生更改,也不会保持居中。您需要从应用程序对象中观察NSApplicationDidChangeScreenParametersNotification并重新定位它。

顺便说一句,您是否有理由不使用-[NSWindow center]