macOS 是否针对不同的 UI 级别或不同的框架使用不同的坐标系?

问题描述 投票:0回答:1

我正在慢慢地自学一些 macOS GUI 编程。

我认为坐标系的原点像大多数系统一样位于左上角,但遇到了这个旧的 OS X 文档

局部坐标系 Cocoa 使用笛卡尔坐标系作为指定坐标的基本模型。该系统中的原点位于当前绘图空间的左下角,正值沿着原点向上和右侧的轴延伸。整个系统的根原点位于包含菜单栏的屏幕的左下角。

这似乎与我非常有限的 Mac 编程经验不符,所以我摸索了一些 SwiftUI 代码来测试它:

Path { path in
    path.move(to: .zero)
    path.addLine(to:CGPoint(x: 0, y: 20))
    path.addLine(to:CGPoint(x: 25, y: 25))
    path.addLine(to:CGPoint(x: 20, y: 0))
    path.addLine(to: .zero)
    path.closeSubpath()
}

这应该画一个正方形,其一个角在 X 和 Y 增加的方向上更尖。它产生了这个形状:

这清楚地表明它正在向下和向右移动,这与旧文档相矛盾。

所以我尝试用谷歌搜索 macOS 生态系统中哪些地方使用了旧坐标系,哪些地方使用了新坐标系,但无济于事。

显然,为了向后兼容,他们不能只是在某个时候翻转它。

只有 SwiftUI 在 macOS 中有所不同吗?为了与 iOS 保持一致,我相信 iOS 也使用左上角作为原点?

还是

AppKit
与其他一切相比?或者低级
CoreGraphics
的做法与在
NSView
上运行的高级内容不同吗?

理想情况下,我会敲出一些代码来测试它,但我还很不流畅,除了列出的那些之外,macOS 上可能还有其他区域。我认为这实际上是 Mac 程序员的常识,尽管谷歌搜索起来很难。

macos swiftui appkit cgcontext coordinate-systems
1个回答
1
投票

正如您所怀疑的,AppKit 有一个左下起源,更好地匹配常见的数学约定。 Mac 上的 Core Graphics 也有一个左下起源。核心文本在所有平台上也有一个左下原点。

UIKit(主要是 iOS)有一个左上角约定。这更好地匹配常见的 2D 计算机图形约定,但不匹配常见的 3D 计算机图形约定。不存在“明显”的约定。只有选择。

在平台之间移植时,这一直是一个麻烦。您可以应用各种属性和众所周知的变换来翻转系统。

Path
是 SwiftUI 的一部分。 SwiftUI 的一个关键目标是跨 Apple 平台移植,并且它普遍采用 iOS 左上角约定。您正在阅读的文档仍然准确,但不适用于 SwiftUI。

© www.soinside.com 2019 - 2024. All rights reserved.