Проблемы Задержки Swift

Так что я работаю над созданием приложения, где при нажатии на кнопку он запускает startGame . Это должно затем ждать задержек, которые я создал перед изменением каждого изображения. Задержки работают, но они начинаются, как только я запускаю приложение, а не когда я нажимаю кнопку. С тех пор я пытаюсь это исправить. Есть предложения?

Спасибо за помощь!

Вот что я думаю, это более важный код:

let deadlineTime = DispatchTime.now() + .seconds(1)
let deadlineTime2 = DispatchTime.now() + .seconds(2)
let deadlineTime3 = DispatchTime.now() + .seconds(3)
let deadlineTime4 = DispatchTime.now() + .seconds(4)

@IBAction func startGame(_ sender: AnyObject) {

        trumpImage.isHidden = false

        DispatchQueue.main.asyncAfter(deadline: deadlineTime) {

            self.trumpImage.image = UIImage(named: "trumpTurnOne")

        }

        DispatchQueue.main.asyncAfter(deadline: deadlineTime2) {

            self.trumpImage.image = UIImage(named: "trumpTurnTwo")

        }

        DispatchQueue.main.asyncAfter(deadline: deadlineTime3) {

            self.trumpImage.image = UIImage(named: "trumpTurnThree")

        }

        DispatchQueue.main.asyncAfter(deadline: deadlineTime4) {

                self.runGame()

        }

}

1 ответ

  1. Попробовать это:

    let deadlineTime = {return DispatchTime.now() + .seconds(1)}
    let deadlineTime2 = {return DispatchTime.now() + .seconds(2)}
    let deadlineTime3 = {return DispatchTime.now() + .seconds(3)}
    let deadlineTime4 = {return DispatchTime.now() + .seconds(4)}
    

    Если вы объявили четыре DispatchTimes как свойства экземпляра, оценка начального значения производится при создании экземпляра, а не во время фактического использования этих свойств. Это означаетDispatchTime.now(), что представляет время создания экземпляра, это может быть намного раньше, чем пользователь нажимает кнопку.

    Таким образом, чтобы DispatchTime.now()представить время нажатия кнопки, вам может понадобиться сделать их вычисленными свойствами. Или же вам нужно сделать их локальными переменными.

    @IBAction func startGame(_ sender: AnyObject) {
        let deadlineTime = DispatchTime.now() + .seconds(1)
        let deadlineTime2 = DispatchTime.now() + .seconds(2)
        let deadlineTime3 = DispatchTime.now() + .seconds(3)
        let deadlineTime4 = DispatchTime.now() + .seconds(4)
    
        //...
    }