CGSize和CGRect有什么区别?
对于刚开始阅读CGGeometry参考的人来说,这并不是一目了然的,特别是因为有关于大小是向量的引用。我很惊讶我在StackOverflow上找不到这个基本的问题,所以我决定对它进行更多的研究,并在下面发布我的答案。
发布于 2015-06-05 03:48:20
CGSize
CGSize是一个宽度和一个高度。从技术上讲,它并不是一个矩形(这也是我最初将它与CGRect混淆的原因之一),而只是一个大小。不过,为了举例说明,我将把它表示为下面的矩形:

这种宽度和高度的组合称为struct,它是结构的缩写,最初来自C语言(但我将在这里使用Swift而不是目标C语法)。结构只是一组逻辑相关的变量。在这里我们可以看到CGSize结构:
struct CGSize {
var width: CGFloat
var height: CGFloat
}其中CGFloat要么是float (32位),要么是double (64位)。(见使用CGFloat和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是什么样子的。注意原点是如何出现在不同的角上的:

向量
CGSize结构有时用于表示距离向量,而不是物理大小。作为一个向量,它的值可以是负值。若要规范CGRect结构,使其大小由正值表示,请调用CGRectStandardize函数。
数学中的向量有一个大小(或长度)和一个方向。虽然CGSize没有起源,但是您可以从下面的图表中看到宽度和高度以及它们相关的正或负值是如何给出长度和方向的。

进一步阅读
发布于 2016-08-17 02:46:00
简写版本:它们的名字令人困惑,因为它们都可以用来表示矩形。
CGSize有宽度和高度

CGRect有x,y,宽度和高度

您可以将CGRect看作具有坐标的CGSize。
CGRect通常用于指定一个UIView框架,它(顶部、左边)坐标相对于父视图的(顶部、左侧)坐标。

https://stackoverflow.com/questions/30658045
复制相似问题