UIView缩放动画在更改时会超调

时间:2015-04-01 16:25:53

标签: ios animation uiviewanimation

当我对视图变换进行动画处理时,在第一个动画结束之前重置另一个动画中的变化,一切都很棒(此处显示为旋转)。动画平滑地切换到新目标:

但是当我用刻度来做这件事时,动画就会超越:

这是破解码:

UIView.animateWithDuration(1) {
    self.someView.layer.transform = CATransform3DMakeScale(0.001, 0.001, 1)
}
UIView.animateWithDuration(1,
    delay: 0.5,
    options: nil,
    animations: {
        self.someView.layer.transform = CATransform3DIdentity
    }, completion: nil
)

有没有人见过这个?我做错了吗?

编辑:还有一个很好的解决方法吗?

编辑2:我认为这是this question的副本,我正在投票结束。

2 个答案:

答案 0 :(得分:1)

This blog post提供了答案:在iOS 8中,UIView动画是附加的,这对于缩放动画有一个不幸的结果。

基本上,第二个动画与一起发生第一个动画。唯一的解决方案是在开始新动画之前显式删除原始动画:

view.layer.transform = view.layer.presentationLayer().transform
view.layer.removeAllAnimations()

答案 1 :(得分:0)

您好我不太确定您要查找的内容,但如果您希望视图返回原始比例,则会添加.Autoreverse标记。

UIView.animateWithDuration(1, delay: 0, options: .Autoreverse | .Repeat, animations: {
       myView.layer.transform = CATransform3DMakeScale(0.001, 0.001, 1)
    }, completion: nil)

如果你想把动画串在一起,我会在UIView.animateKeyframesWithDuration()中做到这一点

UIView.animateKeyframesWithDuration(2, delay: 0.0, options: nil, animations: {

        UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.5, animations: {
            // Animation 1
        })

        UIView.addKeyframeWithRelativeStartTime(1, relativeDuration: 0.5, animations: {
            // Animation 2
        })

    }, completion: nil)

Animation Gif