2012-07-31 4 views
8

В моем опыте, я заключить эти:вращение CGAffineTransform идет неправильный путь

YourView.transform = CGAffineTransformMakeRotation(positive value); 

будет вращать вид по часовой стрелке, и

YourView.transform = CGAffineTransformMakeRotation(Negative value); 

будет вращать вид против часовой стрелки,

Но документ говорит:

Угол в радианах, с помощью которого можно поворачивать аффинное трансфо гт. В iOS положительное значение указывает вращение против часовой стрелки, а отрицательное значение указывает вращение по часовой стрелке.

Это противоречит друг другу?

+0

ive проверял его только сейчас, и я получаю те же результаты. в документах указывается, что в OSX оно имеет такое поведение. но не в ios, как вы сказали, очень странно. – Pochi

+0

Действительно ли ваш 'value' должен быть π/2? –

+0

@ibeitia: да, я пробовал π/2 и -π/2 – romox

ответ

23

Ваше замешательство вполне понятно.

По правде говоря, положительный угол представляет собой поворот от положительной оси X к положительной оси Y. Отрицательный угол представляет собой поворот от положительной оси X к отрицательной оси Y.

«Нативная» система координат графического ядра моделируется по стандарту Cartesian coordinate system, в котором ось Y увеличивается вверх на странице. В этой системе, положительный угол представляет собой вращение против часовой стрелки:

normal coordinate system

Так что, если вы создаете свой собственный CGContext (например, с помощью CGBitmapContextCreate или CGPDFContextCreate), вращение будет работать, как вы ожидаете.

Однако в компьютерных системах исторически использовалась система координат, в которой ось Y увеличивается вниз на странице. В перевернутой системе координат, как это, положительный угол представляет собой вращение по часовой стрелке:

flipped coordinate system

Обратите внимание, что в обеих системах координат, положительный угол вращается от положительной оси X в направлении положительной оси Y.

Оказывается, UIKit переворачивает систему координат графических контекстов, которые она создает для вас. Это включает в себя графический контекст, который он устанавливает перед отправкой drawRect: и графическим контекстом, который он устанавливает в UIGraphicsBeginImageContext. (Это объясняет Quartz 2D Programming Guide.) Вы можете проверить это, посмотрев на текущую матрицу преобразования (используя CGContextGetCTM). Вы обнаружите, что он имеет -1 в своем элементе d, что означает, что ось Y перевернулась.

A UIView также использует перевернутую систему координат для выкладки своих подзонов, что влияет на значение свойства UIView .

+0

thx много, оцените! – romox

+1

, но в такой перевернутой системе координат положительный угол представляет поворот по часовой стрелке, но в документах говорится: «В iOS положительное значение указывает вращение против часовой стрелки». Поэтому я думаю, что это все еще противоречиво. Неправильно ли документ? – romox

+0

Иногда это неправильно. Это зависит от контекста, в котором вы используете преобразование. –

Смежные вопросы