Полезные свойства CGRect, а также свойства UIView — UIView.frame и UIView.bounds

CGRect — это структура из точки CGPoint и размера CGSize

struct CGRect {
   var origin: CGPoint // верхний левый угол прямоугольника
   var size: CGSize
}

У CGRect есть очень интересные свойства и методы

var minX: CGFloat // левый угол 
var midY: CGFloat // середина вертикали
intersects(CGRect) -> Bool // пересекаются ли CGRect?
intersect(CGRect) // обрезает CGRect ​до пересечения с другим прямоугольником
contains(CGPoint) -> Bool // Проверяет вхождение точки в прямоугольник

UIView

Получить количество пикселей на точку.

var contentScaleFactor:CGFloat ​//возвращает значение пикселей/точку экрана, на котором находится view

Границы, в которых происходит рисование:

var bounds:CGRect ​// внутреннее пространство (origin и size) вашего view

Это прямоугольник, содержащий пространство для рисования в своей собственной системе координат, т.е. в системе координат самого view, у которого мы запросили это свойство.

Где находится UIView?

var center:CGPoint​// центр вашего view в системе координат superview
var frame:CGRect ​ //прямоугольник в системе координат superview​, который полностью содержит ваш view

Два последних свойства возвращают значение в системе координат родительского superview. Именно поэтому тут мы использовали конвертирование координат из системы одного view в систему координат другого.

Иллюстрация выше сказанного на этой картинке (картинка — кликабельна):

 

Simulator Screen Shot 21 сент. 2015 г., 23.19.44

Точка в центре — это

CGPoint(x: blueView.bounds.width / 2, y: blueView.bounds.height / 2)

т.е. в системе координат голубого view, а точки по краям это

blueView.frame

т.е. в системе координат белого view.

Я написал приложение, в котором можно таскать и вращать голубое view. Если будет интересно поковырять его — пишите в комментариях — выложу на GitHub

Метки: ,
Один комментарий на “Полезные свойства CGRect, а также свойства UIView — UIView.frame и UIView.bounds
  1. Igor:

    Конечно выкладывай

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.