Как использовать CGAffineTransformMakeScale и Rotation сразу?

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

Только одна из этих работ за раз. Как сохранить трансформацию, а затем применить другую? Приветствия

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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

CGAffineTransform CGAffineTransformConcat (
   CGAffineTransform t1,
   CGAffineTransform t2
);

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

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

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

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

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

Ответ 3

Только одна из этих работ за раз.

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

Как сохранить трансформацию, а затем применить другую?

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

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