假设您不关心获取视图的实际像素大小(因为它在 HDPI 和常规显示器之间会有所不同——我无法想象它现在会是一个有用的值),您基本上只想使用NSViewconvertRect:toView:
和 NSWindow 的组合convertBaseToScreen:
。所以,例如,[someView.window convertBaseToScreen:[someView convertRect:someView.bounds toView:nil]]
。这是假设您没有以任何不寻常的方式(旋转它或其他方式)转换视图。请记住,您仍然应该添加一个检查窗口是否响应convertRectToScreen:
并在它响应时使用它 - 这样您就可以避免使用已弃用的方法 ( convertBaseToScreen:
) 在可能的情况下。
之后,如果您需要屏幕的确切像素大小,则可以使用 NSScreen convertRectToBacking:
(我不确定您是否需要它)。至于确定屏幕,NSWindow 有它的screen
方法,在大多数情况下应该足够了。我能看到的唯一问题是视图跨屏幕时,因此您可能必须检查它是否与任何其他显示器相交并合并图像等等。也就是说,我不确定是否CGDisplayCreateImageForRect
会考虑到这一点。你必须自己测试一下。