在指定的时间间隔内以 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
}
我试图通过进度指示器 (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
}