2016-10-04 3 views
0

Итак, я работал над созданием приложения, которое, если вы нажмете на кнопку, вызывает 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() 

     } 

} 
+0

Этот код внутри класса? Он должен находиться внутри вашего контроллера просмотра. Кроме того, убедитесь, что вы подключили этот метод к своей кнопке через построитель интерфейса. – Connor

+0

Я сделал обе эти вещи, просто не показал весь код – MGallo

+0

Хорошо, тогда будет легче ответить, если вы покажете больше кода. Ваши переменные времени отправки также должны быть внутри IBAction, иначе они будут инициализированы правильно, поскольку контроллер загружается, хотя это не должно вызывать вашу функцию. У вас нет явных вызовов 'startGame' в другом месте? – Connor

ответ

0

Попробуйте это:

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)} 

Если вы заявили четыре DispatchTime S в качестве свойств экземпляра, оценка первоначальной стоимости, когда генерируется экземпляр, а не время, когда эти свойства фактически используются. Что означает, что 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) 

    //... 
} 
+0

Lol не может попробовать прямо сейчас, но я могу позже плохо вернуться к вам, ребята – MGallo

Смежные вопросы