Вы можете использовать преобразования 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 градусов по часовой стрелке.Также остерегайтесь порядка преобразований, поскольку это может привести к нежелательным последствиям.