ConvertRect:toView:当app被拖动到第二个监视器时给出错误的rect

时间:2013-07-23 12:42:18

标签: cocoa nsview

我正在尝试截取视图。

我正在使用以下链接中的代码,该代码正常工作,但有一个例外:

cocoa: how to render view to image?

我遇到的问题是,如果我将应用程序窗口拖到第二台显示器上,屏幕截图会抓取错误的矩形。基本上,矩形已经垂直移位,或者可能使用左上角而不是左下角的原点。

奇怪的是,应用程序在启动监视器上工作正常,但当我将其拖动到第二个监视器(没有关闭并重新启动应用程序)时,矩形捕获出错。如果我将应用程序拖回启动监视器,一切都会重新开始工作。

主显示器和辅助显示器具有不同的分辨率。

转换rect的代码如下:

NSRect originRect = [aView convertRect:[aView bounds] toView:[[aView window] contentView]];
NSRect rect = originRect;
rect.origin.y = 0;
rect.origin.x += [aView window].frame.origin.x;
rect.origin.y += [[aView window] screen].frame.size.height - [aView window].frame.origin.y - [aView window].frame.size.height;
rect.origin.y += [aView window].frame.size.height - originRect.origin.y - originRect.size.height;

是否有人知道为什么这在启动监视器上正确计算,但是在辅助监视器上计算错误?

问题必须与不同的分辨率有关,但我不明白为什么对convertRect:toView(或后续计算)的调用不起作用。

顺便说一下,我正在开发10.8.4,目标是10.7。

由于

达伦。

1 个答案:

答案 0 :(得分:0)

问题是屏幕尺寸始终是从当前显示器中获取的,当应该从主显示器中取出时。

rect.origin.y += [[aView window] screen].frame.size.height - [aView window].frame.origin.y - [aView window].frame.size.height;
rect.origin.y += [aView window].frame.size.height - originRect.origin.y - originRect.size.height;

替换为:

NSArray *screens = [NSScreen screens];
NSScreen *primaryScreen = [screens objectAtIndex:0];

rect.origin.y = primaryScreen.frame.size.height - [aView window].frame.origin.y - originRect.origin.y - originRect.size.height;

我在这篇文章的顶部引用的原始帖子中添加了完整的答案:

cocoa: how to render view to image?