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
没有原点,但您可以从下图中看到宽度和高度及其相关的正值或负值如何给出长度和方向。