Как повернуть слой / вид (например, как в enigmo)

Я знаю, как перемещать слой на ощупь. Но я также хотел бы иметь возможность вращать изображение.

Есть ли какой-нибудь пример кода, который показывает, как это сделать? Или кто-нибудь может дать мне совет?

Спасибо!


person rksprst    schedule 28.10.2008    source источник


Ответы (4)


Самый простой способ сделать это - использовать свойство трансформации слоя:

float   angle = M_PI;  //rotate 180°, or 1 π radians
layer.transform = CATransform3DMakeRotation(angle, 0, 0.0, 1.0);

Первый аргумент функции CATransform3DMakeRotation - это величина поворота в радианах. Следующие три описывают вектор, вокруг которого нужно вращаться. Это описание вектора по оси Z, фактически перпендикулярного экрану. Это повернет слой вверх ногами.

person Ben Gottlieb    schedule 28.10.2008

В итоге я сделал это так:

CGAffineTransform transform = CGAffineTransformMakeRotation(angle);
[[self viewWithTag:999] setTransform:transform];

Обратите внимание, что угол указывается в радианах.

person rksprst    schedule 28.10.2008
comment
В своем решении вы изменяете преобразование вида, а не слоя. Просто к сведению. - person Ben Gottlieb; 29.10.2008
comment
45 градусов = M_PI / 4, 90 градусов = M_PI / 2 math.rice.edu/ ~ pcmi / сфера / drg_txt.html - person John Erck; 03.04.2014

Вы должны использовать свойство трансформации представления. В Руководстве по программированию для iPhone OS есть пример кода для поворота изображения в разделе Запуск в ландшафтном режиме

person Jesús A. Álvarez    schedule 28.10.2008

Вам следует взглянуть на пример Apple MoveMe, чтобы узнать, как перемещаться слой, основанный на прикосновении. Он также применяет некоторые преобразования масштабирования по мере того, как вы это делаете, так что это должно служить разумным примером применения преобразований поворота.

person Louis Gerbarg    schedule 28.10.2008