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);
Как вы можете видеть, первое более или менее просто удобство, поэтому вам не нужно писать так много кода.