Трансформации CTM против аффинных преобразований в iOS (для перевода, поворота, масштабирования)
Я прочитал документацию Transforms в Руководстве по 2D-программированию кварца. В этом случае существует два способа сделать преобразования. Одним из способов является изменение Матрицы трансформации тока (CTM). Он имеет следующие методы:
-
CGContextTranslateCTM
-
CGContextRotateCTM
-
CGContextScaleCTM
Другим способом является использование аффинных преобразований. Он имеет следующие методы:
-
CGAffineTransformTranslate
-
CGAffineTransformRotate
-
CGAffineTransformScale
Состояние документов
Функции аффинного преобразования, доступные в кварце, работают на матрицах, а не на CTM.
Но я не понимаю, как это влияет на меня практически. Кажется, я могу получить тот же результат, используя любой метод. Когда следует использовать трансформации CTM и когда следует использовать аффинные преобразования?
Ответы
Ответ 1
CTM - это текущая матрица преобразования, и методы CTM будут выполнять операции с текущей матрицей.
Другая версия функций сделает преобразование на заданной матрице, что означает, что вам нужно указать, какую матрицу вы пытаетесь преобразовать. После этого вы можете применить преобразование к CTM любым способом, которым хотите, или использовать его для каких-либо других целей.
Например, эти 2 операции будут одинаковыми:
CGContextTranslateCTM(context, 10, 10);
аффинных:
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, 10, 10);
CGContextConcatCTM(context, transform);
Как вы видите, первый из них более или менее удобен, поэтому вам не нужно писать столько кода.