仅当单击 UIButton 时才调用计时器函数

问题描述 投票:0回答:1

我有一个函数,我想在每次调用间隔时运行,但我只想在单击我的

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)


}

如何让它等待我的点击事件执行?

swift timer uikit uibutton programmatically
1个回答
0
投票

最简单的修复方法是更改计时器,使其调用

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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.