获取NSView屏幕rect并显示ID

时间:2012-08-31 11:16:43

标签: objective-c macos cocoa nsview nsrect

鉴于NSView,我如何才能获得屏幕显示和显示屏,以便我可以使用CGDisplayCreateImageForRect

我找到了NSWindow convertRectToScreen方法,但它只能从10.7开始(我也需要10.6),但它仍然不会显示NSView所在的显示。

1 个答案:

答案 0 :(得分:3)

假设你不关心获取视图的实际像素大小(因为它在HDPI和常规显示之间有所区别 - 我无法想象它现在是一个有用的值),你基本上只是想要使用NSView的convertRect:toView:和NSWindow convertBaseToScreen:的组合。例如,[someView.window convertBaseToScreen:[someView convertRect:someView.bounds toView:nil]]。这假设你没有以任何不寻常的方式转换视图(旋转它或其他东西)。请记住,您仍然应该检查窗口是否响应convertRectToScreen:并使用它(如果有) - 这样就可以避免在可能的情况下使用弃用的方法(convertBaseToScreen:)。

之后,如果你需要屏幕的确切像素大小,你可以使用NSScreen的convertRectToBacking:(我不确定你是否需要它)。至于确定屏幕,NSWindow有screen方法,在大多数情况下应该足够了。我能看到的唯一问题是当视图穿过屏幕时,您可能必须检查它是否与任何其他显示相交并合并图像等等。也就是说,我不确定CGDisplayCreateImageForRect是否会解释这个问题。你必须亲自测试一下。