Немедленное преобразование вращения UIButton с анимированным масштабом - PullRequest
0 голосов
/ 15 июня 2019

Я хотел бы анимировать масштаб UIButton и снова оживить масштаб после завершения, но повернуть его без анимации.Я попытался поместить преобразование вращения в вызов анимации без продолжительности, но каким-то образом оно все равно делает его частью или заменяет анимацию масштабирования.

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

let transforms: CGAffineTransform = .identity

button.transform = transforms

UIView.animate(withDuration: 1.05, delay: 0.0, options: .allowUserInteraction, animations: {
    button.transform = transforms.scaledBy(x: 0.75, y: 0.75)
}, completion: { _ in

        button.transform = CGAffineTransform(rotationAngle: 90 * (.pi/180)) // I want this to happen immediately, without animation

        UIView.animate(withDuration: 1.1, delay: 0.0, options: .allowUserInteraction, animations: {
            button.transform = transforms.scaledBy(x: 1.0, y: 1.0)
        }, completion:nil)

})

1 Ответ

1 голос
/ 15 июня 2019

Вы устанавливаете поворот transform, чтобы это происходило немедленно - и это происходит! Но затем вы сразу же начинаете анимировать его снова относительно вашей transforms переменной - возвращая ее текущий transform к тому, что в этой переменной.

Вместо использования переменной для отслеживания кнопки transform, просто обратитесь к ее текущему transform, например так:

button.transform = .identity
UIView.animate(withDuration: 1.05, delay: 0.0, options: .allowUserInteraction, animations: {
    button.transform = button.transform.scaledBy(x: 0.75, y: 0.75)
}, completion: { _ in
        button.transform = CGAffineTransform(rotationAngle: 90 * (.pi/180)) // I want this to happen immediately, without animation
        UIView.animate(withDuration: 1.1, delay: 0.0, options: .allowUserInteraction, animations: {
            button.transform = button.transform.scaledBy(x: 1.0, y: 1.0)
        }, completion:nil)

})
...