повернуть объект UIView по оси X - PullRequest
1 голос
/ 24 ноября 2011

У меня есть подклассный объект UIView с начальной высотой obj.frame.size.height.

    UIImageView *imageView=[[UIImageView alloc] initWithFrame:CGRectMake(...)];
imageView setImage:...
//here comes rotation

У меня есть переменная double newHeight (она меньше начальной высоты объекта) Мне нужно повернуть объект по оси х. после вращения высота объекта должна измениться на newHeight Как я мог это сделать?

1 Ответ

2 голосов
/ 24 ноября 2011

Вы можете использовать преобразования QuartzCore для достижения этой цели.Прежде всего, если это еще не сделано, вы должны добавить платформу QuartzCore.Теперь импортируйте <QuartzCore/QuartzCore.h> в соответствующий файл.Пример преобразования для достижения переворота по оси X и изменения размера до новой высоты может выглядеть следующим образом:

CALayer *testLayer = test1.layer;
double oldSize = test1.bounds.size.height;
double newSize = 100.0;
testLayer.transform = CATransform3DConcat(CATransform3DMakeRotation(M_PI, 0.0, 1.0, 0.0),
                                          CATransform3DMakeScale(1.0, newSize/oldSize, 1.0)
                                          );

test1 - это представление, которое необходимо преобразовать.Это достигается сначала вращением на полкруга (PI в радианах) вокруг оси y (это эффективно переворачивает влево и вправо).Затем преобразование масштабирования оставляет x и z такими, какие они есть, но масштабирует y так, чтобы новая высота была точно необходимой newSize.Обратите внимание, что это преобразование только изменяет рендеринг.Например, если вы теперь изменили bounds вида на новую высоту, к нему будет применено преобразование, и вы увеличите масштаб нового (большего / меньшего) объекта дважды.

В зависимости от необходимого поворотаВы также можете вращаться вдоль оси x, чтобы переворачивать вверх и вниз, или делать произвольные повороты вокруг z, например, CATransform3DMakeRotation (M_PI_4, 0.0, 0.0, 1.0), чтобы повернуть на 45 градусов по часовой стрелке.Также остерегайтесь порядка преобразований, поскольку это может привести к нежелательным последствиям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...