Ответ 1
CGSize
CGSize
- ширина и высота. Это не технически считается прямоугольником (это одна из причин, почему я смутил его с CGRect
в начале), а скорее как размер. Однако, для иллюстрации, я буду представлять его как прямоугольник ниже:
Эта комбинация ширины и высоты называется структурой, которая является короткой для структуры и первоначально исходит из языка C (но я буду использовать синтаксис Swift, а не Objective 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
также является структурой. Если факт, то это структура структур: a 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 говорит
СтруктураA
CGSize
иногда используется для представления вектора расстояния, а не физического размера. В качестве вектора его значения могут быть отрицательными. Чтобы нормализовать структуруCGRect
, чтобы ее размер был представлен положительными значениями, вызовите функциюCGRectStandardize
.
Векторы в математике имеют величину (или длину) и направление. Хотя CGSize
не имеет источника, на следующей диаграмме видно, как ширина и высота вместе с их положительными или отрицательными значениями дают как длину, так и направление.