Вращение CGContext

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

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

- (void)drawRect:(CGRect)rect {
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextTranslateCTM(context, -50, -50);
  CGContextRotateCTM (context, 0.3);
  CGContextTranslateCTM(context,768/2,1024/2);
  [image drawAtPoint:CGPointMake(0,0)];
}

Я попытался делать то же использование CGAffineTransform, но получил те же результаты.

6
задан Peter Hosey 14 June 2010 в 06:36
поделиться

1 ответ

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

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

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

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

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

Вы заметите, что заметка повернулась и оказалась в центре.

22
ответ дан 8 December 2019 в 05:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: