CTM-преобразования против Affine Transforms в iOS (для перевода, поворота, масштабирования)

Я прочитал документацию по Transforms в Руководстве по программированию в Quartz 2D. В нем, кажется, есть два способа сделать преобразования. Одним из способов является модификация матрицы преобразования тока (CTM). У него есть методы, подобные следующим:

  • CGContextTranslateCTM
  • CGContextRotateCTM
  • CGContextScaleCTM

Другой способ - использовать аффинные преобразования. У него есть методы, подобные следующим:

  • CGAffineTransformTranslate
  • CGAffineTransformRotate
  • CGAffineTransformScale

Документы государства

Доступные в Quartz функции аффинного преобразования работают с матрицами, а не с CTM.

Но я не понимаю, как это влияет на меня практически. Кажется, что я могу получить тот же результат, используя любой метод. Когда я должен использовать преобразования CTM и когда я должен использовать преобразования Affine?

1 ответ

Решение

CTM - это текущая матрица преобразования, а методы CTM будут выполнять операции с текущей матрицей.

Другая версия функций выполнит преобразование для данной матрицы, что означает, что вам нужно указать, какую матрицу вы хотите преобразовать. После этого вы можете применить преобразование к CTM любым удобным для вас способом или использовать его для любых других целей.

Например, эти 2 операции будут одинаковыми:

CGContextTranslateCTM(context, 10, 10);

аффинных:

CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, 10, 10);
CGContextConcatCTM(context, transform);

Как вы можете видеть, первое более или менее просто удобство, поэтому вам не нужно писать так много кода.

Другие вопросы по тегам