CGSize 和 CGRect 的区别
Difference between CGSize and CGRect
CGSize 和 CGRect 有什么区别?
作为阅读 CGGeometry Reference 的初学者,它并不是很明显,特别是因为其中提到大小是一个向量。我有点惊讶我在 Whosebug 上找不到这个基本问题,所以我决定进一步研究它并 post 我的答案在下面。
CGSize
CGSize
是宽度和高度。它在技术上不被视为矩形(这是我一开始将它与 CGRect
混淆的原因之一),而只是一个大小。但是,为了便于说明,我将其表示为下面的矩形:
这种width和heigh的组合被称为struct,structure的缩写,最初来自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
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
看到它的样子。注意原点如何出现在不同的角上:
向量
A CGSize
structure is sometimes used to represent a distance vector, rather than a physical size. As a vector, its values can be negative. To normalize a CGRect
structure so that its size is represented by positive values, call the CGRectStandardize
function.
Vectors 在数学中有大小(或长度)和方向。虽然 CGSize
没有原点,但您可以从下图中看出宽度和高度及其关联的正值或负值如何给出长度和方向。
进一步阅读
- CGGeometry Reference
- Structures in Swift
- Enums and Structs in Swift
- Big Nerd Ranch - Rectangles, Part 1
- CGRect, CGSize and CGPoint
- C Structures
- Difference between frame.size.width and frame.width
简短版:它们的名字很容易混淆,因为它们都可以用来表示矩形。
CGSize 有宽度和高度
CGRect 有 x、y、宽度和高度
您可以将 CGRect 视为带坐标的 CGSize。
CGRect常用来指定一个UIView框架,其(top,left)坐标是相对于父view的(top,left)坐标。
CGSize 和 CGRect 有什么区别?
作为阅读 CGGeometry Reference 的初学者,它并不是很明显,特别是因为其中提到大小是一个向量。我有点惊讶我在 Whosebug 上找不到这个基本问题,所以我决定进一步研究它并 post 我的答案在下面。
CGSize
CGSize
是宽度和高度。它在技术上不被视为矩形(这是我一开始将它与 CGRect
混淆的原因之一),而只是一个大小。但是,为了便于说明,我将其表示为下面的矩形:
这种width和heigh的组合被称为struct,structure的缩写,最初来自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
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
看到它的样子。注意原点如何出现在不同的角上:
向量
A
CGSize
structure is sometimes used to represent a distance vector, rather than a physical size. As a vector, its values can be negative. To normalize aCGRect
structure so that its size is represented by positive values, call theCGRectStandardize
function.
Vectors 在数学中有大小(或长度)和方向。虽然 CGSize
没有原点,但您可以从下图中看出宽度和高度及其关联的正值或负值如何给出长度和方向。
进一步阅读
- CGGeometry Reference
- Structures in Swift
- Enums and Structs in Swift
- Big Nerd Ranch - Rectangles, Part 1
- CGRect, CGSize and CGPoint
- C Structures
- Difference between frame.size.width and frame.width
简短版:它们的名字很容易混淆,因为它们都可以用来表示矩形。
CGSize 有宽度和高度
CGRect 有 x、y、宽度和高度
您可以将 CGRect 视为带坐标的 CGSize。
CGRect常用来指定一个UIView框架,其(top,left)坐标是相对于父view的(top,left)坐标。