gpt4 book ai didi

macos - NSRect 与 CGRect : y-axis inversion

转载 作者:行者123 更新时间:2023-12-03 16:05:27 25 4
gpt4 key购买 nike

所以我试图将 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 上)。然而我不喜欢这个,我有一种感觉它会破裂/视网膜出现问题或 future 出现并发症。

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

最佳答案

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

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

另一方面,Quartz 事件服务和 Quartz 显示服务将原点放在左上角。 UIKit(在 iOS 上)将原点放在左上角。您可以在 NSView 子类(在 OS X 上)中重写 isFlipped,以将其原点置于左上角。

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

关于macos - NSRect 与 CGRect : y-axis inversion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17057757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com