【问题标题】:Make NSViews and NSWindows have fixed position使 NSViews 和 NSWindows 有固定的位置
【发布时间】:2012-04-28 19:07:21
【问题描述】:

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

NSRect mainFrame = [[NSScreen mainScreen] frame]
NSRect helpFrame = NSZeroRect;
helpFrame.origin.x = (mainFrame.size.width - width) / 2.0;

无论分辨率是多少,我的窗口的 x 值是否始终位于中心?我觉得当我连接外接显示器时,分辨率会发生变化,屏幕中间不再是我想要的位置。 NSScreen mainScreen 适合打电话吗?谢谢!

【问题讨论】:

    标签: objective-c xcode cocoa nsview


    【解决方案1】:

    首先,您要问的内容模棱两可。 “同一个地方”是什么意思?

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

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

    顺便问一下,你不使用-[NSWindow center]有什么原因吗?

    【讨论】:

    • 我将如何在NSApplicationDidChangeScreenParametersNotification 下重新居中对象?有没有简单的更新方法?
    • 如果您对-[NSWindow center] 提供的定位没问题,只需在相关窗口中调用即可。否则,计算您喜欢的任何位置并调用-setFrame... 方法之一。
    猜你喜欢
    • 2011-10-05
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多