IOS / Objective-C: анимация нескольких CGAffine преобразований - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь выполнить анимацию, которая выполняет три вещи одновременно: переводит, поворачивает и изменяет размер изображения.

Я могу сделать два одновременно, перевести и изменить размер.Однако, когда я добавляю по очереди в конце следующего кода, он игнорируется.И если я помещу его в начало кода, изменение размера игнорируется.Я читал, что вы можете сделать составной переход с помощью view.transform, однако я не смог заставить его работать.

Вот мой текущий код:

CGPoint destPoint = CGPointMake(-100,-50);
 float radians =[self Degrees2Radians:-35];
 [UIView animateWithDuration:2 
                 animations:^{
                     //TRANSLATE
                     self.imageView.center = CGPointMake(self.imageView.center.x + destPoint.x, self.imageView.center.y + destPoint.y);

                     //ROTATE
                      self.imageView.transform = CGAffineTransformMakeRotation(radians);

                  //SCALE

                     self.imageView.transform = CGAffineTransformMakeScale(0.2, 0.2); // here the final size will be 20%

                 }
                 completion:nil
 ];

}

Может кто-нибудь порекомендовать способ заставить все три вещи происходить одновременно.

Вот некоторый код для swift, который использует свойство transform представления, но я не смог найтиэквивалент в Objective-C.

view.transform= CGAffineTransform(scaleX: 1.5, y: 1.5)
view.transform = view.transform.rotated(by angle: CGFloat(45 * M_PI / 180))

Заранее благодарим за любые предложения.

1 Ответ

0 голосов
/ 18 сентября 2018

Вы можете использовать функцию CGAffineTransformRotate в существующем преобразовании, чтобы применить вращение.Вы также можете использовать CGAffineTransformTranslate и CGAffineTransformScale для применения перевода и масштабирования.Обратите внимание, что порядок операций имеет значение.

Например, если у вас есть существующее преобразование myTransform, вы можете повернуть его следующим образом:

myTransform = CGAffineTransformRotate(myTransform, M_PI / 2);

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

Более подробная информация доступна на https://developer.apple.com/documentation/coregraphics/cgaffinetransform-rb5?language=objc.

...