如何将Cocoa co-ords从左上角==原点转换为左下角== origin

时间:2009-05-12 13:46:57

标签: objective-c cocoa nswindow

我使用CGWindowListCopyWindowInfo来获取所有窗口的列表。它根据原点是屏幕的左上角给出了每个窗口的坐标。

如果我使用NSWindow的setFrame方法,则基于原点的坐标是屏幕的左下角

什么是从一个转换为另一个的干净,可靠的方式?

补充说:干净可靠,我的意思是,无论用户有多个屏幕还是正在使用Spaces,都能确保工作正常。我认为必须有一个使用库API的已知习语。

3 个答案:

答案 0 :(得分:11)

数学非常可靠: - )

yFromBottom = screenHeight - windowHeight - yFromTop

主屏幕高度为

[[[NSScreen screens] objectAtIndex:0] frame].size.height

答案 1 :(得分:3)

我建议使用NSAffineTransform。如果您相对于默认原点进行绘制,然后对视图应用变换,则可以基本上一举翻动。

答案 2 :(得分:2)

尝试这样的事情(from here):

NSRect boundsInWindow = [myView convertRect:[myView bounds] toView:nil];
NSRect visibleRectInWindow = [myView convertRect:[myView visibleRect] toView:nil];

// Flip Y to convert NSWindow coordinates to top-left-based window coordinates.
float borderViewHeight = [[myView window] frame].size.height;
boundsInWindow.origin.y = borderViewHeight - NSMaxY(boundsInWindow);
visibleRectInWindow.origin.y = borderViewHeight - NSMaxY(visibleRectInWindow);