微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用另一个动画中断 UIView 动画时删除延迟

如何解决使用另一个动画中断 UIView 动画时删除延迟

我正在用另一个动画打断一个飞行中的动画。它工作正常,但在动画更改之前有一个明显的延迟。

当我在 Animate to 5 之后单击 Reset to 1 时,顶部的方块在缩小之前继续扩大一秒钟。对于底部的方块,我用 layer.removeAllAnimations() 强制动画停止并立即缩小...但是,它从完整的 5x 缩放值而不是当前值开始。

Image of the problem

这是我的代码

class ViewController: UIViewController {
    
    let resetButton = UIButton(type: .system)
    let finishButton = UIButton(type: .system)
    
    let squareView = UIView(frame: CGRect(x: 100,y: 100,width: 30,height: 30))
    let referenceSquareView = UIView(frame: CGRect(x: 100,height: 30))
    let squareView2 = UIView(frame: CGRect(x: 100,y: 300,height: 30))
    let referenceSquareView2 = UIView(frame: CGRect(x: 100,height: 30))
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        resetButton.frame = CGRect(x: 200,y: 80,width: 160,height: 20)
        finishButton.frame = CGRect(x: 200,y: 140,height: 20)
        
        view.addSubview(resetButton)
        view.addSubview(finishButton)
        
        view.addSubview(referenceSquareView)
        view.addSubview(squareView)
        view.addSubview(referenceSquareView2)
        view.addSubview(squareView2)
        referenceSquareView.transform = CGAffineTransform(scaleX: 5,y: 5)
        referenceSquareView2.transform = CGAffineTransform(scaleX: 5,y: 5)
        
        squareView.backgroundColor = UIColor.blue
        referenceSquareView.backgroundColor = UIColor.red
        squareView2.backgroundColor = UIColor.blue
        referenceSquareView2.backgroundColor = UIColor.red
        
        resetButton.setTitle("Reset to 1",for: .normal)
        resetButton.setTitleColor(.blue,for: .normal)
        resetButton.addTarget(self,action: #selector(resetTo1(_:)),for: .touchUpInside)
        finishButton.setTitle("Animate to 5",for: .normal)
        finishButton.setTitleColor(.blue,for: .normal)
        finishButton.addTarget(self,action: #selector(animateto5(_:)),for: .touchUpInside)
    }
    @objc func resetTo1(_ sender: UIButton!) {
        UIView.animate(withDuration: 3) {
            self.squareView.transform = CGAffineTransform(scaleX: 1,y: 1)
        }
        
        self.squareView2.layer.removeAllAnimations() /// removing animations for the bottom square
        UIView.animate(withDuration: 3) {
            self.squareView2.transform = CGAffineTransform(scaleX: 1,y: 1)
        }
    }
    @objc func animateto5(_ sender: UIButton!) {
        UIView.animate(withDuration: 3) {
            self.squareView.transform = CGAffineTransform(scaleX: 5,y: 5)
        }
        
        self.squareView2.layer.removeAllAnimations() /// removing animations for the bottom square
        UIView.animate(withDuration: 3) {
            self.squareView2.transform = CGAffineTransform(scaleX: 5,y: 5)
        }
    }
}

有什么办法可以立即改变动画吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。