CGSize和CGRect之间的区别

时间:2015-06-05 03:48:21

标签: ios cgrect cgsize

CGSize和CGRect之间有什么区别?

作为初学者阅读CGGeometry Reference,它并不是很明显,特别是因为大小的引用是一个向量。我很惊讶我在StackOverflow上找不到这个基本问题,所以我决定研究它并在下面发表我的答案。

2 个答案:

答案 0 :(得分:23)

CGSize

CGSize是宽度和高度。从技术上讲,它不是一个矩形(这是我在开头时将它与CGRect混淆的一个原因),而只是一个大小。但是,出于说明的目的,我将在下面将其表示为矩形:

enter image description here

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

struct CGSize {
  var width: CGFloat
  var height: CGFloat
}

其中CGFloatfloat(32位)或double(64位)。 (见What's the difference between using CGFloat and float?

您可以通过执行以下操作来制作CGSize

var size = CGSize(width: 50, height: 30)

的CGRect

CGRect是一个矩形。然而,从名称中不能立即看出的是,除了宽度和高度之外,它还有一个起源。

enter image description here

相比之下,

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的情况。注意原点如何出现在不同的角落:

enter image description here

载体

documentation for CGSize

  

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

数学中的

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

enter image description here

进一步阅读

答案 1 :(得分:5)

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

CGSize 具有宽度和高度

enter image description here

CGRect 有x,y,宽度和高度

enter image description here

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

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

enter image description here