Ваше замешательство вполне понятно.
По правде говоря, положительный угол представляет собой поворот от положительной оси X к положительной оси Y. Отрицательный угол представляет собой поворот от положительной оси X к отрицательной оси Y.
«Нативная» система координат графического ядра моделируется по стандарту Cartesian coordinate system, в котором ось Y увеличивается вверх на странице. В этой системе, положительный угол представляет собой вращение против часовой стрелки:
Так что, если вы создаете свой собственный CGContext
(например, с помощью CGBitmapContextCreate
или CGPDFContextCreate
), вращение будет работать, как вы ожидаете.
Однако в компьютерных системах исторически использовалась система координат, в которой ось Y увеличивается вниз на странице. В перевернутой системе координат, как это, положительный угол представляет собой вращение по часовой стрелке:
Обратите внимание, что в обеих системах координат, положительный угол вращается от положительной оси X в направлении положительной оси Y.
Оказывается, UIKit переворачивает систему координат графических контекстов, которые она создает для вас. Это включает в себя графический контекст, который он устанавливает перед отправкой drawRect:
и графическим контекстом, который он устанавливает в UIGraphicsBeginImageContext
. (Это объясняет Quartz 2D Programming Guide.) Вы можете проверить это, посмотрев на текущую матрицу преобразования (используя CGContextGetCTM
). Вы обнаружите, что он имеет -1
в своем элементе d
, что означает, что ось Y перевернулась.
A UIView
также использует перевернутую систему координат для выкладки своих подзонов, что влияет на значение свойства UIView
.
ive проверял его только сейчас, и я получаю те же результаты. в документах указывается, что в OSX оно имеет такое поведение. но не в ios, как вы сказали, очень странно. – Pochi
Действительно ли ваш 'value' должен быть π/2? –
@ibeitia: да, я пробовал π/2 и -π/2 – romox