Вращение CGContext - PullRequest
       30

Вращение CGContext

6 голосов
/ 13 июня 2010

У меня есть изображение размером 100x100 пикселей, которое я хочу нарисовать под различными углами, повернутыми вокруг центра изображения.Следующий код работает, но вращается вокруг исходного оригинала системы координат (левый верхний угол), а не в переведенном местоположении.Таким образом, изображение вращается не вокруг себя, а вокруг верхнего левого угла экрана.

Следующий код был запущен в пользовательском представлении в пустом приложении, кроме этого ничего.1005 * Я пытался сделать то же самое с помощью CGAffineTransform, но получил те же результаты.

1 Ответ

22 голосов
/ 14 июня 2010

Вращение всегда о происхождении; вам нужно не победить это, а воспользоваться этим.

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

  1. Переместите начало координат в центр экрана.
  2. Поворот на нужную сумму. (Представьте, что крайние концы оси x движутся при этом; левый конец наклоняется вниз, а правый конец наклоняется вверх.)
  3. Переместите начало координат «влево» и «вниз» (оба они вдоль новых осей x и y) на половину размера изображения.

Представьте себе движение изображения на iPad через каждый из этих шагов. Или, еще лучше, возьмите заметку Post-It и смоделируйте ее вручную:

  1. Начните с заметки в углу iPad.
  2. Переместите заметку так, чтобы этот угол заметки находился в центре iPad.
  3. Поверните записку за угол.
  4. Переместите ноту «влево» (относительно себя) на половину ее ширины, а «вниз» (относительно себя) на половину ее высоты.

Вы заметите, что нота заканчивается вращением и в центре.

...