CGSize和CGRect之间有什么区别?
作为初学者阅读CGGeometry Reference,它并不是很明显,特别是因为大小的引用是一个向量。我很惊讶我在StackOverflow上找不到这个基本问题,所以我决定研究它并在下面发表我的答案。
答案 0 :(得分:23)
CGSize
是宽度和高度。从技术上讲,它不是一个矩形(这是我在开头时将它与CGRect
混淆的一个原因),而只是一个大小。但是,出于说明的目的,我将在下面将其表示为矩形:
这种宽度和高度的组合被称为结构,它是结构的缩写,最初来自C语言(但我将在这里使用Swift而不是Objective C语法)。结构只是一组逻辑相关的变量。在这里,我们可以看到CGSize
结构:
struct CGSize {
var width: CGFloat
var height: CGFloat
}
其中CGFloat
是float
(32位)或double
(64位)。 (见What's the difference between using CGFloat and float?)
您可以通过执行以下操作来制作CGSize
:
var size = CGSize(width: 50, height: 30)
CGRect
是一个矩形。然而,从名称中不能立即看出的是,除了宽度和高度之外,它还有一个起源。
相比之下,
CGsize
没有起源。
CGRect
也是一种结构。事实上,它是一种结构结构: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
结构有时用于表示距离矢量,而不是物理尺寸。作为矢量,其值可以是负数。要规范化CGRect
结构以使其大小由正值表示,请调用CGRectStandardize
函数。
Vectors具有幅度(或长度)和方向。虽然CGSize
没有原点,但您可以从下图中看到宽度和高度及其相关的正值或负值如何给出长度和方向。
答案 1 :(得分:5)