更改时 UIView 比例动画过冲

UIView scale animation overshoots when changed

当我为视图变换的变化设置动画,然后在第一个动画完成之前在另一个动画中重置该变化时,一切都很好(此处显示为旋转)。动画平滑切换到新目标:

但是当我使用比例尺执行此操作时,动画效果非常好:

这里是破解代码:

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 的副本,我投票决定关闭。

你好,我不太确定你在找什么,但如果你想让视图恢复到原来的比例,你可以添加 .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)

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

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

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