我有一个函数,我想在每次调用间隔时运行,但我只想在单击我的
UIButton
后执行我的问题是,从我运行模拟器的那一刻起,该函数就会自行执行。防止这种情况发生,我尝试定义一个 isPlayButtonClicked
。并初始化为 false,因此当单击 playAnimation
UIButton 时,它会将其设置为 true,然后检查初始布尔值是否更改的 wasPlayButtonClicked
将在控制台中打印“已选择”,但就像我说的,在我点击按钮之前我就看到它被打印出来了。
var setTimer: Timer!
var isPlayButtonClicked: Bool = false
@objc func playAnimation(_ sender: Any) {
isPlayButtonClicked = true
wasPlayButtonClicked()
}
func wasPlayButtonClicked() {
if isPlayButtonClicked == true {
print("selected ")
}
}
override func viewDidLoad() {
super.viewDidLoad()
setTimer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(playAnimation(_:)), userInfo: nil, repeats: true)
}
如何让它等待我的点击事件执行?
最简单的修复方法是更改计时器,使其调用
wasPlayButtonClicked
选择器而不是 playAnimation
选择器。
更好的解决方法是在
playAnimation
函数中触发计时器。在实际点击按钮之前无需启动计时器。
这是视图控制器的返工:
class SomeVC: UIViewController {
var setTimer: Timer? // change to optional
@objc func playAnimation(_ sender: Any) {
setTimer?.invalidate() // Esnure there's only one timer even if the button is tapped multiple times
// Change selector to wasPlayButtonClicked
setTimer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(wasPlayButtonClicked), userInfo: nil, repeats: true)
wasPlayButtonClicked()
}
@objc func wasPlayButtonClicked() {
print("selected")
}
override func viewDidLoad() {
super.viewDidLoad()
// Don't setup the timer here
}
}