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