所以我试图将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的解决方案或想法?
答案 0 :(得分:6)
矩形的原点是左上角还是左下角取决于使用矩形的坐标系。这取决于您是使用CGRect
还是NSRect
。
通常,AppKit使用左下角为原点的坐标系。同样,您创建的CGContext
会将原点放在左下角。
另一方面,Quartz Event Services和Quartz Display Services将原点放在左上角。 UIKit(在iOS上)将原点放在左上角。您可以覆盖isFlipped
子类中的NSView
(在OS X上)以将其原点放在左上角。
当您将矩形从传统(左下原点)转换为翻转(左上原点)坐标系时,您的基本数学是必要且正确的。