Ширина и высота увеличиваются после применения CGAffineTransformRotate к UIView - PullRequest
10 голосов
/ 01 февраля 2012

Я хочу повернуть представление программно, для этого я использовал следующий код:

CGAffineTransform rotateTransform = contentView.transform;
CGAffineTransform rotatenewTransform  = CGAffineTransformRotate(rotateTransform,aFloatRotate);
contentView.transform = rotatenewTransform;

Когда я это делаю, ширина и высота contentView (мой UIView) увеличиваются.

Что я должен сделать, чтобы contentView остался как есть и тоже вращался?

спасибо заранее.

Здесь я объясню свою проблему более подробно:

мой просмотр содержимого содержит кнопки и просмотр изображений в нем. этот contentView добавлен в фоновом режиме, и этот contentView не должен выходить за границы этого фона.

но когда я поворачиваю это представление содержимого верхним кодом, его высота и высота contentView увеличиваются, и поэтому иногда он выходит за пределы фона.

Надеюсь, вам это станет ясно. :)

1 Ответ

11 голосов
/ 01 февраля 2012

Ширина и высота (предположительно, вы берете это из frame.size) должны измениться, потому что они описывают наименьший прямоугольник, который содержит весь повернутый вид - если вы поверните прямоугольник на 45 градусов, тогда прямоугольник удерживает повернутый прямоугольник шире и выше исходного прямоугольника.

«Реальный» размер вашего повернутого вида будет по-прежнему доступен в прямоугольнике bounds - это выражается во внутренней системе координат представления, которая не повернута.

Итак, если ваш исходный frame был оригиналом (100,100), размером (100,50), ваш повернутый вид имел бы frame, где исходный элемент и размер были прямоугольником, который мог бы соответствовать вашему повернутому виду внутри него, описано в системе координат супервизии. Если вы сейчас сделали это:

CGFloat width = contentView.frame.size.width;

Вы получите ваше измененное значение. Однако, если вы сделали это:

CGFloat width = contentView.bounds.size.width;

Вы получите исходное значение ширины 100.

...