2011-12-17 3 views
-2

Перед поворотной рамой UIView: - (123.46 326.855; 214.773 149.148);CGAffineTransformMakeRotation изменяет высоту и ширину UIView

После рамы поворота UIView: - (109.585 304.877; 242.524 193.104);

Я использовал следующий код: -

CGAffineTransform landscapeTransform; 
    landscapeTransform = CGAffineTransformMakeRotation(rotate); 
    [contentView setTransform:landscapeTransform]; 

Пожалуйста, помогите. Спасибо

+0

Какое значение 'rotate' в коде выше? – jrturton

+0

его изменение каждый раз, когда он не исправлен – Leena

ответ

0

Я собираюсь предположить, что вы пытаетесь повернуть вид на 90 градусов, и вы прошли через 90 или -90 в функцию преобразования.

Значения должны быть в радианах, а не в градусах. Существуют константы, доступные для преобразования, M_PI дает вам pi (180 градусов) и M_PI_2 дает вам pi/2 (90 градусов).

Рамка просмотра будет зависеть от любых аффинных преобразований - кадр выражается в системе координат супервизора, поэтому он всегда будет меняться, чтобы отразить это. Прямоугольник границ будет соответствовать первоначальному размеру.

Если вы поворачиваете представление на 90 градусов, тогда высота кадра становится шириной кадра и наоборот.

+0

Я прошел в радианах, а затем меняются высота и ширина – Leena

+0

Извините за гадание! Я обновил свой ответ. – jrturton

4

Кадр Subview - это наименьший прямоугольник (в координатах границ супервизора), который содержит subview (с применяемыми преобразованиями). Таким образом, на него влияют преобразования.

UIView *parent = [UIView new]; 
parent.bounds = CGRectMake(0, 0, 100, 100); 

UIView *child = [UIView new]; 
child.bounds = CGRectMake(0, 0, 10, 10); 
child.center = CGPointZero; 
    // at this point child.frame == { -5, -5, 10, 10 } 

child.transform = CGAffineTransformMakeRotation(M_PI_4); 
    // at this point child.frame == { -5 * sqrt(2), -5 * sqrt(2), 
    //        10 * sqrt(2), 10 * sqrt(2) } 
Смежные вопросы