带有比例和 alpha 的 UIView 弹簧动画

问题描述

我有这个代码

thermAssist.alpha = 0
thermAssist.transform = CGAffineTransform(scaleX: 0.1,y: 0.1)

UIView.animate(withDuration: 1.5,delay: 0,usingSpringWithdamping: 0.4,initialSpringVeLocity: 0,options: .curveEaseInOut,animations: { [weak self] in
        self?.thermalAssistant?.transform = .identity
        self?.thermalAssistant?.alpha = 1
    },completion: nil)

它有效,但我只需要为变换更改而不是 alpha 使用弹簧效果。我需要 alpha 从 0 变为 1 并保持 1。有什么办法可以实现这一点吗?

解决方法

您可以通过分离缩放和不透明度变化的动画并同时运行这些单独的动画来实现它,我尝试使用 CABasicAnimationCASpringAnimation,最后将它们放入 CATransaction 以同时运行它们

        let springAnim = CASpringAnimation(keyPath: "transform.scale")
        springAnim.fromValue = 0.1
        springAnim.toValue = 1
        springAnim.duration = 1.4
        springAnim.damping = 0.4
        springAnim.fillMode = .forwards
        springAnim.isRemovedOnCompletion = false


        let alphaAnim = CABasicAnimation(keyPath: "opacity")
        alphaAnim.fromValue = 0
        alphaAnim.toValue = 1
        alphaAnim.duration = 1.4
        alphaAnim.fillMode = .forwards
        alphaAnim.isRemovedOnCompletion = false

        CATransaction.begin()
        animationView.layer.add(springAnim,forKey: "test")
        animationView.layer.add(alphaAnim,forKey: "test2")
        CATransaction.commit()

操作:

enter image description here