0
的视图的背景颜色,我想蓝色基于在此情况下为70的值来进行动画。这意味着,颜色开始在视图中从0px加载,并停止在任何值的数量。另外,我希望在加载颜色的同时将数字从0计数到最终值。是否有任何提示/链接或一些方向可以让我指出,以实现这一目标?提前致谢! 夫特3:如何当用户输入其包含下面的图像视图控制器动画类似于进度条
的视图的背景颜色,我想蓝色基于在此情况下为70的值来进行动画。这意味着,颜色开始在视图中从0px加载,并停止在任何值的数量。另外,我希望在加载颜色的同时将数字从0计数到最终值。是否有任何提示/链接或一些方向可以让我指出,以实现这一目标?提前致谢! 夫特3:如何当用户输入其包含下面的图像视图控制器动画类似于进度条
创建progressView
具有所需backgroundColor
let progressView = UIView(frame: CGRect(x: 0, y: 0, width: 1, height: 50))
progressView.backgroundColor = .blue
self.view.addSubview(progressView)
调用下面的函数进行动画其宽度正比于progress
func setProgress(_ progress: CGFloat) {
let fullWidth: CGFloat = 200
let newWidth = progress/100*fullWidth
UIView.animate(withDuration: 1.5) {
self.progressView.frame.size = CGSize(width: newWidth, height: self.progressView.frame.height)
}
}
创建progressLabel
和currentProgress
可变
let progressLabel = UILabel(frame: CGRect(x: 0, y: 100, width: 50, height: 50))
var currentProgress: CGFloat = 0
label.text = String(currentProgress)
self.view.addSubview(progressLabel)
调用下面的函数与延迟一个循环更新的进度,例如:setLabelProgress(initialValue: self.currentProgress, targetValue: 70)
func setLabelProgress(initialValue: CGFloat, targetValue: CGFloat) {
guard currentProgress != targetValue else { return }
let range = targetValue - initialValue
let increment = range/CGFloat(abs(range))
let duration: TimeInterval = 1.5
let delay = duration/TimeInterval(range)
currentProgress += increment
progressLabel.text = String(describing: currentProgress)
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + delay) {
self.setLabelProgress(initialValue: initialValue, targetValue: targetValue)
}
}
对于第二个标签调用相同的功能,但交换initialValue
和targetValue