Как дальше преобразовать / оживить уже преобразованный / анимированный UIView в Swift? - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь повернуть с анимацией UIImageView на 5 ° при каждом нажатии. Однако каждый раз, когда я нажимаю на него, кажется, что он возвращается к исходному углу и начинает анимацию оттуда, а не с того места, где он уже был. Я понимаю, что преобразования должны быть объединены в цепочку, поэтому я делаю это, однако это все еще не работает:

UIView.animate(withDuration: 1.0, animations: {
        self.imgView.transform = self.imgView.transform.concatenating(CGAffineTransform(rotationAngle: CGFloat.pi/180*5))
    }, completion: nil)

Я нашел многообещающую опцию в варианте функции animate, но это заставляет ее выглядетьеще хуже (как-то даже искажает изображение):

UIView.animate(withDuration: 1.0, delay: 0.0, options: .beginFromCurrentState, animations: {
        self.imgView.transform = self.imgView.transform.concatenating(CGAffineTransform(rotationAngle: CGFloat.pi/180*5))
    }, completion: nil)

Что я делаю не так?

Кстати, у представления изначально есть преобразование масштаба и преобразования, которое устанавливается один раз в viewDidLoad:

        imgView.frame = CGRect(x: 0, y: view.frame.maxY-view.frame.midX, width: view.frame.maxX, height: view.frame.maxX)
    imgView.transform = CGAffineTransform.identity.scaledBy(x: 14, y: 14).translatedBy(x: 0, y: 150)

Я упоминаю об этом на всякий случай, если проблема имеет какое-либо отношение к этой части.

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

Я нашел проблему. Это первоначальный перевод. Если я возьму это, это работает отлично. Итак, теперь я знаю, что позиционирование вида всегда должно выполняться через фрейм и / или ограничения, а не с помощью ByB.

0 голосов
/ 11 октября 2019

увеличивайте угол при каждом вызове преобразования

angel = angel + 0.5
self.imgView.transform = self.imgView.transform.concatenating(CGAffineTransform(rotationAngle: CGFloat.pi/180* angel))
...