首页 > 解决方案 > 如何使用“CADdisplaylink”制作动画(不会制作动画)

问题描述

我正在尝试使用 CADdisplaylink 为名为“Miles”的标签设置动画,即使我没有收到任何错误,当我点击 UIButton 时动画也不会正确显示。我尝试自己修复它,但我真的不知道错误在哪里。

尝试在 viewDidLoad 中移动我的 CADdisplaylink 代码,但这意味着它会立即启动动画(我不知道该逻辑是否真的正确)。所以,把它改成我的 UIButton 动作代码,所以当它被按下时它会执行动画。它只会加起来'endValue = self.myCar.miles!+ 10' 然后崩溃,不让我按其他任何东西。

这是在 viewDidLoad 之前

@IBOutlet var labelMiles: UILabel!
let animationDuration = 1.5
    let animationStartDate = Date()

这是在 viewDidLoad 和其他与动画无关的代码之后。

@IBAction func accelerateButton(_ sender: UIButton) {
        //        CAD display here; para animacion de MILES
        let cadDisplay = CADisplayLink(target: self, selector: #selector(accelerateButton(_:)))
        cadDisplay.add(to: .main, forMode: RunLoop.Mode.default)

        guard let startValue = self.myCar.miles else { return () }
//        myCar.addMiles(addToMiles: 10.0)
        let endValue = self.myCar.miles! + 10
        let now = Date()
        let elapsedTime = now.timeIntervalSince(animationStartDate)
        if elapsedTime  > animationDuration {
            self.labelMiles.text = "\(endValue)"
        } else {
            let percentage = elapsedTime / animationDuration
            let value = percentage * (endValue - startValue)
            self.labelMiles.text = "\(value)"
        }

        /*myCar.acceletate()
            updateView()*/
    }

“accelerteButton”应该触发一个从“startValue”开始计数的动画,[这是我在 viewDidLoad 中用其他值确定的默认值,例如:]

myCar = Car(miles: 12000.50, tires: 4, model: "SUV Santa Fe", age: 2019, companyName: "Hyundai", color: #colorLiteral(red: 0.05882352963, green: 0.180392161, blue: 0.2470588237, alpha: 1), imageName: UIImage(named: "Hyundai.jpg"))
        myGarage.append(myCar)

到“endValue”,它应该只添加 10.0(因为它是一个 Double)。有没有我遗漏的错误?

标签: iosswiftanimation

解决方案


推荐阅读