我使用CGWindowListCopyWindowInfo来获取所有窗口的列表。它根据原点是屏幕的左上角给出了每个窗口的坐标。
如果我使用NSWindow的setFrame方法,则基于原点的坐标是屏幕的左下角。
什么是从一个转换为另一个的干净,可靠的方式?
补充说:干净可靠,我的意思是,无论用户有多个屏幕还是正在使用Spaces,都能确保工作正常。我认为必须有一个使用库API的已知习语。
答案 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);