Проблемы с плавной анимацией - PullRequest
0 голосов
/ 25 августа 2018

У меня есть кнопка, которую я пытаюсь анимировать, чтобы обозначить эффект выпадающего меню.Подобно тому, что видно здесь

https://medium.com/@phillfarrugia/building-a-tinder-esque-card-interface-5afa63c6d3db

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

Может ли кто-нибудь помочь мне воссоздать этот более плавный переход, который виден в предоставленной мною ссылке

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

@objc func showCalendarPressed(){
    print("show calendar pressed")
    //will check if there has been any animation work done on the UIVIEW
    if self.showCalendar.transform == .identity {

        UIView.animate(withDuration: 1.5) {
            self.showCalendar.transform = CGAffineTransform(rotationAngle: self.radians(degrees: 180) )

        }

    }else {
        //there is a transform on it and we need to change it back
        UIView.animate(withDuration: 0.5, animations: {
            //will remove the transform and animate it back
            self.showCalendar.transform = .identity
        }) { (true) in

        }
    }
}

Функция радиан

func radians(degrees: Double) -> CGFloat{
    return CGFloat(degrees * .pi / 180)
}

1 Ответ

0 голосов
/ 25 августа 2018

Вы идете ровно на 1/2 пути (может быть, немного больше в зависимости от вашего преобразования в radians), и когда вы возвращаетесь к .identity, он продолжает идти в том же направлении, потому что это ближе (направление с наименьшим вращение). Попробуйте сначала использовать немного меньший угол. Я нашел это на работу:

Заменить:

self.radians(degrees: 180)

с:

self.radians(degrees: 179.999)

Пройдя чуть менее половины пути (что будет незаметно), возврат к .identity повернет направление, из которого он пришел.

...