我制作了一个从数字 10 开始每秒倒计时的应用程序。倒计时是动画。这是代码:
import UIKit
class ViewController: UIViewController {
var startNumber = 10
lazy var numberLabel: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.font = label.font.withSize(160)
label.textColor = .lightGray
return label
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
view.addSubview(numberLabel)
NSLayoutConstraint.activate([
numberLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
numberLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
_ = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (time) in
self.numberLabel.text = String(self.startNumber)
self.startNumber -= 1
UIView.animate(withDuration: 0.99, animations: {
self.numberLabel.alpha = 0
}, completion: { (true) in
self.numberLabel.alpha = 1
})
}
}
}
如果 UIView 和 Timer 间隔相等,则倒计时会显示不均匀的数字动画。这就是为什么在代码中将 UIView 间隔设置为 0.99 而不是 1 以显示每个数字的动画倒计时。动画仍然不流畅,因为您可以看到数字在一毫秒内“闪烁”,但我认为这是因为间隔已设置为 0.99 而不是 1。
我的问题是:
1) 为什么在 UIView 和 Timer 上设置相等的间隔会导致奇怪的倒计时动画?
2)倒计时还是每秒倒数还是倒数0.99秒?
最佳答案
把代码改成那样
_ = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (time) in
self.startNumber -= 1
self.numberLabel.alpha = 1
UIView.setAnimationCurve(UIViewAnimationCurve.easeInOut)
UIView.animate(withDuration: 1, animations: {
self.numberLabel.text = String(self.startNumber)
self.numberLabel.alpha = 0
}, completion: { (true) in
})
}
关于ios - 在定时器中运行 UIView.animate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47751928/