2015-06-05 2 views
12

В чем разница между CGSize и CGRect?Разница между CGSize и CGRect

Как новичок, читающий CGGeometry Reference, это было не сразу очевидно, тем более, что были ссылки на размер, являющийся вектором. Я был удивлен, что не мог найти этот основной вопрос в StackOverflow, поэтому решил продолжить исследование и опубликовать свой ответ ниже.

ответ

21

CGSize

CGSize представляет собой ширину и высоту. Это не технически считается прямоугольником (это одна из причин, почему я смутил его с CGRect в начале), а скорее просто размером. Тем не менее, с целью иллюстрации, я буду представлять его в виде прямоугольника ниже:

enter image description here

Такое сочетание ширины и Heigh известна как структура, которая является коротким для структуры, и первоначально исходит от C (но я буду использовать синтаксис Swift, а не Objective C). Структура - это всего лишь группа логически связанных переменных. Здесь мы можем увидеть CGSize структуру:

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

, где CGFloat является либо float (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

Vectors

documentation for CGSize говорит

CGSize структура иногда используется для представления вектора расстояния, а не физический размер. В качестве вектора его значения могут быть отрицательными. Чтобы нормализовать структуру CGRect, чтобы ее размер был представлен положительными значениями, вызовите функцию CGRectStandardize.

Vectors в математике имеют величину (или длину) и направление. Хотя CGSize не имеет источника, на следующей диаграмме видно, как ширина и высота вместе с их положительными или отрицательными значениями дают как длину, так и направление.

enter image description here

Дополнительная литература

+0

Great Explanation! – Haileapp

4

Короткая версия: Их имена запутанный, потому что они оба могут быть использованы для представления прямоугольников.

CGSize имеет ширину и высоту

enter image description here

CGRect имеет х, у, ширина и высота

enter image description here

Вы можете думать о CGRect как CGSize с координатами ,

CGRect обычно используется для определения кадра UIView, координаты (сверху, слева) относительно (верхнего, левого) координат родительского представления.

enter image description here

Смежные вопросы