首页 > 解决方案 > 如何停止 QuartzCore-CABasicAnimation 的动画

问题描述

我的动画效果很好,尽管我想添加一个切换按钮,通过点击暂停动画,正如您在“动画正在运行”中看到的那样 - 当您打开屏幕并单击它时心脏会跳动 - 它停止返回原始状态尺寸

@IBOutlet var heartImage: UIButton!
var isAnimRunning = true

let pulseAnimation:CABasicAnimation = CABasicAnimation(keyPath: "transform.scale")

        override func viewDidLoad() {
        super.viewDidLoad()
           heartBit()
        }

        func heartBit(){
            if isAnimRunning == true{

                pulseAnimation.duration = 0.8
                pulseAnimation.toValue = NSNumber(value: 2.0)
                pulseAnimation.repeatCount = HUGE
                pulseAnimation.isCumulative = true
                pulseAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
                pulseAnimation.autoreverses = true
                pulseAnimation.repeatCount = Float.greatestFiniteMagnitude
                pulseAnimation.fromValue = NSNumber(value: 0.0)

                self.view.layer.add(pulseAnimation, forKey: "transform.scale")
              //  self.view.layer.add(pulseAnimation, forKey: "transform.scale")
            }else if isAnimRunning == false{       //*****tried all that without any luck

                self.pulseAnimation.toValue = NSNumber(value: 1.0)

          //      self.view.layer.removeAnimation(forKey: "transform.scale")
                //self.view.layer.removeAllAnimations()
                // view.layer.removeAllAnimations()
                //self.view.layer.removeAnimation(forKey: "transform.scale")
               // self.view.layer.removeAllAnimations()

            }

        }

        @IBAction func heartBtn(_ sender: Any) {
           isAnimRunning = !isAnimRunning
        }

    }

谢谢你的帮手。任何问题我都有空

再次 - 敲击时使心脏停止并再次敲击 - 心脏恢复动画

标签: swift

解决方案


要切换动画,我想更新如下heartBit方法,

func heartBit() {
    isAnimRunning = !isAnimRunning

    if isAnimRunning == false { // Run animation if no animation
        pulseAnimation.duration = 0.8
        pulseAnimation.toValue = NSNumber(value: 2.0)
        pulseAnimation.repeatCount = HUGE
        pulseAnimation.isCumulative = true
        pulseAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        pulseAnimation.autoreverses = true
        pulseAnimation.repeatCount = Float.greatestFiniteMagnitude
        pulseAnimation.fromValue = NSNumber(value: 0.0)

        self.view.layer.add(pulseAnimation, forKey: "transform.scale")
    } else { // Remove animation if already running
        self.view.layer.removeAllAnimations()
    }
}

button click现在您可以像在其中一样调用此方法,viewDidLoad它将切换动画。

@IBAction func heartBtn(_ sender: Any) {
    heartBit()
}

注意:确保您的heartBtn方法已连接并在按钮单击时被调用。在我的观察中,当整个视图处于动画状态时,很难点击按钮。


推荐阅读