Sur*_*gch 14 ios cgrect cgsize
CGSize和CGRect有什么区别?
作为初读者阅读CGGeometry参考文献,它并不是立即显而易见的,特别是因为大小是一个向量的引用.我很惊讶我在StackOverflow上找不到这个基本问题,所以我决定研究它并在下面发表我的答案.
Sur*_*gch 25
CGSize是宽度和高度.它在技术上不被认为是一个矩形(这是我CGRect在开始时混淆它的一个原因),而只是一个大小.但是,为了便于说明,我将其表示为下面的矩形:

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

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

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

简短版本:它们的名称令人困惑,因为它们都可以用来表示矩形.
CGSize有宽度和高度
CGRect有x,y,宽度和高度
您可以将CGRect视为带坐标的CGSize.
CGRect通常用于指定UIView框架,其(上,左)坐标相对于父视图的(顶部,左侧)坐标.