在指定的时间间隔内以 Swift 为 Double 从 0 到 1 设置动画

Animating a Double from 0 to 1 in Swift over a specified interval

我试图通过进度指示器 (Double) 在指定时间段内连续调用函数,该时间段内应从 0 变为 1。有没有办法 "animate" 这种从 0 到 1 的变化 Swift?

更新:

这是我根据 https://github.com/danielgindi/ios-charts

更新饼图数据的代码
internal func animateDataChange(fromDataSet: PieChartDataSet, toDataSet: PieChartDataSet, progress: Double) -> PieChartDataSet {
    var dataEntries: [ChartDataEntry] = []
    for i in 0..<fromDataSet.yVals.count {
        let yValue = (toDataSet.yVals[i].value - fromDataSet.yVals[i].value) * progress + fromDataSet.yVals[i].value
        let dataEntry = ChartDataEntry(value: yValue, xIndex: i)
        dataEntries.append(dataEntry)
    }
    let animatedDataSet = PieChartDataSet(yVals: dataEntries, label: "")
    return animatedDataSet
}

我想做的是动画化两个数据集之间的变化,变化的进度反映在 "progress" 参数中。我需要继续调用函数直到 "progress" = 1.

我会查看 CAKeyFrameAnimation,然后将要设置动画的 Double 值的文本存储在 CATextLayer.

您可以对 CATextLayer 的字符串值进行动画处理,这样您就可以对从一个字符串值到另一个字符串值进行动画处理。 (我假设您想要设置动画的 Double 以字符串形式在某处呈现。)您可以重复动画,并在指定时间设置中间值。

我决定改用 NSTimer,每 0.01 秒将计数器从 0 增加到 1。我知道这可能不是最有效的方法,但它确实有效:

var progress: Double = 0
var timer = NSTimer.scheduledTimerWithTimeInterval(0.01, target:self, selector: Selector("updateProgress"), userInfo: nil, repeats: true)

func updateProgress() {
    guard progress <= 1 else {
        timer.invalidate()
        return
    }
    progress += 0.01
}