NSRect与CGRect:y轴反转

时间:2013-06-12 04:38:34

标签: macos cocoa core-graphics

所以我试图将NSRect转换为CGRect。我使用了NSRectToCGRect()来复制一切,但不考虑y原点轴。

问题:(0,0)的CGRect原点是左上角。 NSRect原点(0,0)位于左下角。

因此,NSRect (0,0,100,100)框位于屏幕的左下方,而CGRect (0,0,100,100)框位于屏幕的左上角。

我有一个黑客通过基本数学修复y源:

fixedOriginY = screenHeight - NSRect.size.height - NSRect.origin.y

因此,NSRect (0,0,100,100)的等价物实际上是CGRect (0,800,100,100)(在我的900px高度MBA上)。但是我不喜欢这个,我觉得它会破坏视网膜或未来并发症的问题。

有没有人有关于如何正确地将NSRect转换为CGRect的解决方案或想法?

1 个答案:

答案 0 :(得分:6)

矩形的原点是左上角还是左下角取决于使用矩形的坐标系。这取决于您是使用CGRect还是NSRect

通常,AppKit使用左下角为原点的坐标系。同样,您创建的CGContext会将原点放在左下角。

另一方面,Quartz Event Services和Quartz Display Services将原点放在左上角。 UIKit(在iOS上)将原点放在左上角。您可以覆盖isFlipped子类中的NSView(在OS X上)以将其原点放在左上角。

当您将矩形从传统(左下原点)转换为翻转(左上原点)坐标系时,您的基本数学是必要且正确的。