CGSize和CGRect之间的区别

Sur*_*gch 14 ios cgrect cgsize

CGSize和CGRect有什么区别?

作为初读者阅读CGGeometry参考文献,它并不是立即显而易见的,特别是因为大小是一个向量的引用.我很惊讶我在StackOverflow上找不到这个基本问题,所以我决定研究它并在下面发表我的答案.

Sur*_*gch 25

CGSize

CGSize是宽度和高度.它在技术上不被认为是一个矩形(这是我CGRect在开始时混淆它的一个原因),而只是一个大小.但是,为了便于说明,我将其表示为下面的矩形:

在此输入图像描述

宽度和高度的这种组合被称为结构,它是结构的缩写,最初来自C语言(但我将使用Swift而不是Objective C语法).结构只是一组逻辑相关的变量.在这里我们可以看到CGSize结构:

struct CGSize {
  var width: CGFloat
  var height: CGFloat
}
Run Code Online (Sandbox Code Playgroud)

其中CGFloatfloat(32位)或double(64位).(请参阅使用CGFloat和float之间的区别是什么?)

您可以CGSize通过执行以下操作来创建:

var size = CGSize(width: 50, height: 30)
Run Code Online (Sandbox Code Playgroud)

的CGRect

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文档

CGSize结构有时用于表示距离矢量,而不是一个物理尺寸.作为矢量,其值可以是负数.要规范化CGRect结构以使其大小由正值表示,请调用该CGRectStandardize函数.

数学中的向量具有幅度(或长度)和方向.虽然CGSize没有原点,但您可以从下图中看到宽度和高度及其相关的正值或负值如何给出长度和方向.

在此输入图像描述

进一步阅读


tot*_*rio 6

简短版本:它们的名称令人困惑,因为它们都可以用来表示矩形.

CGSize有宽度和高度

在此输入图像描述

CGRect有x,y,宽度和高度

在此输入图像描述

您可以将CGRect视为带坐标的CGSize.

CGRect通常用于指定UIView框架,其(上,左)坐标相对于父视图的(顶部,左侧)坐标.

在此输入图像描述