问题描述
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。有什么办法可以实现这一点吗?
解决方法
您可以通过分离缩放和不透明度变化的动画并同时运行这些单独的动画来实现它,我尝试使用 CABasicAnimation
和 CASpringAnimation
,最后将它们放入 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()
操作: