use*_*946 8 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-origin的hack:
fixedOriginY = screenHeight - NSRect.size.height - NSRect.origin.y
Run Code Online (Sandbox Code Playgroud)
因此,相当于一个NSRect (0,0,100,100)实际上CGRect (0,800,100,100)(在我的900px高度MBA).但是我不喜欢这个,我觉得它会破坏视网膜或未来并发症的问题.
有没有人有关于如何正确地将NSRect转换为CGRect的解决方案或想法?
矩形的原点是左上角还是左下角取决于使用矩形的坐标系.它不取决于你是否使用CGRect或NSRect.
通常,AppKit使用左下角为原点的坐标系.同样,CGContext您创建的一个将原点放在左下角.
另一方面,Quartz Event Services和Quartz Display Services将原点放在左上角.UIKit(在iOS上)将原点放在左上角.您可以isFlipped在NSView子类中重写(在OS X上)以将其原点放在左上角.
当您将矩形从传统(左下原点)转换为翻转(左上原点)坐标系时,您的基本数学是必要且正确的.
| 归档时间: |
|
| 查看次数: |
1819 次 |
| 最近记录: |