流畅的动画问题

时间:2018-08-25 12:00:30

标签: ios swift core-animation

我有一个要制作动画的按钮,以表示某种下拉菜单效果。类似于这里看到的

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 :(得分:0)

您正精确地绕过1/2步(取决于您对radians的转换,可能会稍微多一点),当您返回.identity时,它会保持相同的方向,因为距离越近(旋转最少的方向)。最初尝试使用稍小的角度。我发现这可行:

替换:

self.radians(degrees: 180)

具有:

self.radians(degrees: 179.999)

通过略微小于1/2的距离(这是不可察觉的),返回.identity将会旋转它的方向。