【发布时间】:2018-07-26 09:04:13
【问题描述】:
我有一个for循环如下:
@objc private func resetValue() {
for i in stride(from: value, to: origValue, by: (value > origValue) ? -1 : 1) {
value = i
}
value = origValue
}
当设置value 时,它会更新label:
private var value = 1 {
didSet {
updateLabelText()
}
}
private func updateLabelText() {
guard let text = label.text else { return }
if let oldValue = Int(text) { // is of type int?
let options: UIViewAnimationOptions = (value > oldValue) ? .transitionFlipFromTop : .transitionFlipFromBottom
UIView.transition(with: label, duration: 0.5, options: options, animations: { self.label.text = "\(value)" }, completion: nil)
} else {
label.text = "\(value)"
}
}
我希望如果value=5 和origValue=2,那么标签会翻转数字5,4,3,2。但是,这并没有发生 - 请提出任何建议?
我尝试过使用延迟功能:
func delay(_ delay:Double, closure: @escaping ()->()) {
DispatchQueue.main.asyncAfter(
deadline: DispatchTime.now() + Double(Int64(delay * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: closure)
}
然后将以下内容放在stride 代码中:
delay(2.0) { self.value = i }
但是,这似乎也不起作用。
感谢您提供的任何帮助。
【问题讨论】:
-
所以开头显示的值为 5,新的值为 2,因此变为 5,4,3,2...?