我有两个变量:
var textOne: String = "Some text"
var textTwo: String = "Some other text"
现在我想将这些值分配给UILabel,所以我一遍又一遍地遍历它们。
EG。对于5秒MyLabel.text = textOne
,它变为MyLabel.text = textTwo
然后重新开始,因此标签中的文字每5秒更改一次。
现在我已为两个功能设置了两个计时器。
5秒后,此功能将运行:
showTextOne() {
MyLabel.text = textOne
}
10秒后,此功能将运行:
showTextTwo() {
MyLabel.text = textTwo
}
但是这只会改变标签两次,我希望只要显示当前的VC,它就会在两个值之间保持变化。
那么还有其他方法可以在两个值之间更改UILabel.text吗?
答案 0 :(得分:4)
你需要一个变量来跟踪当前文本是什么,然后一个5秒计时器在两个选项之间切换,这可以在Swift 3中非常简单地编写。
var isTextOne = true
let timer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true) {
myLabel.text = isTextOne ? textTwo:textOne
isTextOne = !isTextOne
}
更新为了与iOS 10之前,watchOS 3和macOS 10.12兼容,因为旧版本没有基于块的计时器:
var isTextOne = true
func toggleText() {
myLabel.text = isTextOne ? textTwo:textOne
isTextOne = !isTextOne
}
let timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(toggleText), userInfo: nil, repeats: true)
答案 1 :(得分:0)
每10秒运行一些方法的最简单方法是将NSTimer与repeats = true
一起使用。
override func viewDidLoad() {
super.viewDidLoad()
var timer = NSTimer.scheduledTimerWithTimeInterval(10, target: self, selector: #selector(update), userInfo: nil, repeats: true)
}
func update() {
// Something cool
}
答案 2 :(得分:0)
您可以使用计时器或同步调度队列来完成此任务。
例如,您可以使用以下代码使用同步调度队列方法每五秒运行一次任务。
let current = 0
func display() {
let deadline = DispatchTime.now() + .seconds(5)
DispatchQueue.main.asyncAfter(deadline: deadline) {
if self.current == 0 {
MyLabel.text = "Hello world 1."
self.current == 1
} else if self.current == 1 {
MyLabel.text = "Hello World 2."
self.current == 0
}
self.display() // This will cause the loop.
}
}