上下平移时对UIView进行动画处理

时间:2019-06-18 21:12:25

标签: swift animation uiview cgaffinetransform

我有一个名为spiralButton的按钮,我希望它可以动画显示上下跳跃,并使其翻转3次,向上3次,向下3次。我正在使用translationBy来移动它,并旋转它来旋转它,尽管在本示例中,我只将其动画化为一个转弯的一部分,当动画结束时回溯到另一个方向。

首先,我不知道如何首先使其旋转不止一次。例如,我无法将旋转的(by :)值设置为.pi * 3,因为这似乎只是等于0度并且从不动画。如果将其设置为.pi,则相同。

var transforms: CGAffineTransform = .identity

let jumpDuration:Double = 2.0 //0.8
let halfJumpDuration:Double = jumpDuration/2.0

UIView.animateKeyframes(withDuration: jumpDuration, delay: 0, options: [UIView.KeyframeAnimationOptions.calculationModeCubicPaced], animations: {

    UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: halfJumpDuration/jumpDuration, animations: {
        transforms = transforms.translatedBy(x: 0, y: -60)
        transforms = transforms.rotated(by: .pi/2)
        swirlButton.transform = transforms
    })

    UIView.addKeyframe(withRelativeStartTime: halfJumpDuration/jumpDuration, relativeDuration: halfJumpDuration/jumpDuration, animations: {
        transforms = .identity
        transforms = transforms.translatedBy(x: 0, y: 0)
        swirlButton.transform = transforms
    })

},
   completion: { _ in

        print("animation finished")

})

除了上下波动外,旋转距离与我想发生的情况相去甚远。是否很难使其逆时针旋转3倍并继续逆时针旋转3倍?

1 个答案:

答案 0 :(得分:1)

我认为使用CABasicAnimation更容易。

这是我想出的:

project1.com, project2.com etc.

translate.fillMode = .forwards&translate.isRemovedOnCompletion = false是防止动画之间闪烁的必要条件,并且CATransaction允许我们为第一个动画(结束)结束时设置完成块。