objective-c - 获取 NSView 屏幕矩形和显示 ID

标签 objective-c macos cocoa nsview nsrect

给定一个 NSView,我怎样才能获取它的屏幕矩形和它所在的显示器,这样我就可以使用 CGDisplayCreateImageForRect

我找到了 NSWindow convertRectToScreen方法,但它仅从 10.7 开始可用(我也需要 10.6),并且它仍然没有显示 NSView 处于打开状态。

最佳答案

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

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

关于objective-c - 获取 NSView 屏幕矩形和显示 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12214214/

相关文章:

macos - 在 MacOS/APFS 上使用 Dropbox Smart Sync 延迟释放磁盘空间 - 潜伏着什么危险?

macos - 强制应用程序在主显示器上的特定位置启动

objective-c - 简单的 NSImage 绘图无法按预期工作

iphone - 并发方式加载webView的多个loadRequest

iphone - UITextView 文字垂直对齐

macos - NSTextView打印时限制页面宽度

ios - 有没有办法在 AFNetworking 2.0 中简化这样的代码?

带有推送套件的 IOS voip 应用程序

objective-c - 获取有关拥有事件窗口的应用程序的信息

swift - 快速隐藏 NSTextField 吗?