CGSize 和 CGRect 有什么区别?
作为一个阅读CGGeometry 参考的初学者,这并不是很明显,特别是因为其中提到了 size 是一个向量。我有点惊讶我在 StackOverflow 上找不到这个基本问题,所以我决定对其进行更多研究并在下面发布我的答案。
CGSize 和 CGRect 有什么区别?
作为一个阅读CGGeometry 参考的初学者,这并不是很明显,特别是因为其中提到了 size 是一个向量。我有点惊讶我在 StackOverflow 上找不到这个基本问题,所以我决定对其进行更多研究并在下面发布我的答案。
CGSize是宽度和高度。从技术上讲,它不被认为是一个矩形(这是我一CGRect开始混淆它的一个原因),而只是一个大小。但是,为了便于说明,我将其表示为下面的矩形:

这种宽度和高度的组合被称为结构,它是结构的缩写,最初来自 C 语言(但我将在这里使用 Swift 而不是 Objective C 语法)。结构只是一组逻辑相关的变量。在这里我们可以看到CGSize结构:
struct CGSize {
var width: CGFloat
var height: CGFloat
}
其中CGFloat是float(32 位)或double(64 位)。(请参阅使用 CGFloat 和 float 有什么区别?)
您可以CGSize通过执行以下操作来制作:
var size = CGSize(width: 50, height: 30)
CGRect是一个矩形。但是,从名称中并没有立即显而易见的是,除了宽度和高度之外,它还有一个起源。

CGsize,相比之下,没有起源。
CGRect也是一种结构。事实上,它是结构的结构:a CGPoint(原点)和CGSize(宽度和高度)。这里是:
struct CGRect {
var origin: CGPoint
var size: CGSize
}
CGPoint在哪里
struct CGPoint {
var x: CGFloat
var y: CGFloat
}
您可以CGRect通过执行以下操作来制作:
var rect = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: 50, height: 30))
宽度和高度值可以是负数。我们可以用CGRect. 注意原点如何出现在不同的角落:

CGSize的文档说
CGSize结构有时用于表示距离向量,而不是物理大小。作为一个向量,它的值可以是负数。要规范化CGRect结构以使其大小由正值表示,请调用该CGRectStandardize函数。
数学中的向量具有大小(或长度)和方向。虽然CGSize没有原点,但您可以从下图中看到宽度和高度及其相关的正值或负值如何给出长度和方向。
