Как я использую CGAffineTransformMakeScale и Вращение сразу?

((UIImageView*)[dsry objectAtIndex:0]).transform = CGAffineTransformMakeRotation(1.57*2);
((UIImageView*)[dsry objectAtIndex:0]).transform = CGAffineTransformMakeScale(.5,.5);

Только одна из этих работ за один раз. Как я могу сохранить преобразование и затем применить другого? Аплодисменты

14
задан Peter Hosey 13 December 2009 в 08:10
поделиться

3 ответа

Чтобы расширить то, что сказал Питер, вам нужно использовать следующий код:

CGAffineTransform newTransform;
newTransform = CGAffineTransformMakeRotation(1.57*2);
((UIImageView*)[dsry objectAtIndex:0]).transform = CGAffineTransformScale(newTransform,.5,.5);

Функции CGAffineTransformMake ... создают новые преобразования с нуля, тогда как остальные объединяют преобразования. К видам и слоям может применяться только одно преобразование за раз, поэтому вы можете одновременно создавать несколько эффектов масштабирования, поворота и перемещения для вида.

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

24
ответ дан 1 December 2019 в 07:39
поделиться

Из документации Apple:

CGAffineTransformConcat Возвращает матрица аффинного преобразования построен путем объединения двух существующих аффинные преобразования.

CGAffineTransform CGAffineTransformConcat (
   CGAffineTransform t1,
   CGAffineTransform t2
);

Параметры t1 Первый аффинный преобразование.

t2 Второе аффинное преобразование. Эта аффинное преобразование присоединяется к первое аффинное преобразование.

Возвращаемое значение Новое аффинное преобразование матрица преобразования. То есть t '= t1 * t2.

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

Обратите внимание, что матричные операции не коммутативный - порядок, в котором вы объединение матриц важно. То есть результат умножения матрица t1 матрицей t2 не обязательно равняется результату умножение матрицы t2 на матрицу t1.

9
ответ дан 1 December 2019 в 07:39
поделиться

Только одно из них работает одновременно.

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

Как я могу сохранить преобразование, а затем применить другое?

Объедините их вместе и назначьте полученную матрицу свойству.

Вы можете сохранить матрицу преобразования в переменной типа CGAffineTransform ; вы можете использовать это для промежуточных шагов в более сложных преобразованиях или для того, чтобы сделать код более понятным (или и то, и другое).

2
ответ дан 1 December 2019 в 07:39
поделиться
Другие вопросы по тегам:

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