非原创、ChatGPT 问答生成

CWMoney 应用中的首页记账动画效果,包括“$”符号的跳动和闪亮动画,可以通过组合使用 CABasicAnimationCAKeyframeAnimationCAAnimationGroup 来实现。下面是一个使用 Swift 和 Core Animation 实现类似效果的示例。

实现步骤

  1. 跳动动画:通过 CAKeyframeAnimation 改变视图的 y 坐标实现跳动效果。
  2. 闪亮动画:通过 CABasicAnimation 改变视图的透明度实现闪亮效果。
  3. 组合动画:通过 CAAnimationGroup 将跳动和闪亮动画组合起来,使其同时执行。

代码示例

import UIKit

class ViewController: UIViewController {
    let dollarLabel: UILabel = {
        let label = UILabel()
        label.text = "$"
        label.font = UIFont.systemFont(ofSize: 40)
        label.translatesAutoresizingMaskIntoConstraints = false
        return label
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(dollarLabel)
        setupConstraints()
        animateDollarLabel()
    }

    func setupConstraints() {
        NSLayoutConstraint.activate([
            dollarLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            dollarLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        ])
    }

    func animateDollarLabel() {
        // 跳动动画
        let jumpAnimation = CAKeyframeAnimation(keyPath: "position.y")
        jumpAnimation.values = [0, -10, 0]
        jumpAnimation.keyTimes = [0, 0.5, 1]
        jumpAnimation.duration = 0.5
        jumpAnimation.isAdditive = true
        jumpAnimation.repeatCount = Float.infinity

        // 闪亮动画
        let flashAnimation = CABasicAnimation(keyPath: "opacity")
        flashAnimation.fromValue = 1.0
        flashAnimation.toValue = 0.0
        flashAnimation.duration = 0.5
        flashAnimation.autoreverses = true
        flashAnimation.repeatCount = Float.infinity

        // 组合动画
        let animationGroup = CAAnimationGroup()
        animationGroup.animations = [jumpAnimation, flashAnimation]
        animationGroup.duration = 0.5
        animationGroup.repeatCount = Float.infinity

        dollarLabel.layer.add(animationGroup, forKey: "jumpAndFlash")
    }
}

解释

  • UILabel:创建一个 UILabel 来显示“$”符号,并设置其字体大小和位置。
  • CAKeyframeAnimation:创建一个关键帧动画,改变 position.y 属性,实现跳动效果。values 定义了动画过程中 y 坐标的变化,keyTimes 定义了每个关键帧的时间点,duration 定义了动画持续时间,isAdditive 使动画的值相对原始位置叠加。
  • CABasicAnimation:创建一个基本动画,改变 opacity 属性,实现闪亮效果。fromValuetoValue 分别定义了动画的初始和结束透明度,autoreverses 设置为 true 使动画在结束时反向播放。
  • CAAnimationGroup:创建一个动画组,将跳动和闪亮动画组合在一起,animations 属性包含所有子动画,duration 定义了动画组的持续时间,repeatCount 定义了动画的重复次数。

将这些动画添加到 dollarLabel 的图层上,就可以实现类似 CWMoney 应用中的“$”符号跳动和闪亮的动画效果。