2016-01-17 4 views
0

У меня в настоящее время возникают проблемы с запуском таймера в моем приложении. Вот что мой код выглядит любитНевозможно запустить таймер

func action() { 
    //Paused 
    timer.invalidate() 

    let refreshAlert = UIAlertController(title: "Quit?", message: "Are you sure you want to quit?", preferredStyle: UIAlertControllerStyle.Alert) 

    refreshAlert.addAction(UIAlertAction(title: "Yes!", style: .Default, handler: { (action: UIAlertAction!) in 
     //Quit 
    })) 

    refreshAlert.addAction(UIAlertAction(title: "No!", style: .Default, handler: { (action: UIAlertAction!) in 
     //Dismiss alert and resume game 
     print("Fire") 
     self.timer.fire() 
     refreshAlert.dismissViewControllerAnimated(true, completion: nil) 
    })) 
} 

action, что называется, когда игра приостановлена. Сначала я останавливаю таймер с timer.invalidate(), а затем выводит предупреждение, которое позволяет пользователю подтвердить, хотите ли они выйти или нет. Если они говорят «нет», моя цель - возобновить таймер. Проблема в том, что я вынужден позвонить self, который, как я считаю, конфликтует с ранее существовавшим timer.invalidate(), в результате чего таймер не будет fire. Есть идеи?

+3

Вам нужно запланировать новый таймер –

ответ

0

Как только NSTimer является недействительным, его нельзя использовать повторно. Вам нужно создать новый, чтобы возобновить цикл обжига.

+0

Хорошо, я только что создал новый таймер, однако, как только я его запустил, он, похоже, не забирает, где он остановился, он начинается ровно через «1» секунду после. Так, например, если таймер остановился на 1,25 секунды, он не поднялся бы с того места, где он ушел, он будет ждать еще секунду, а затем обновление. В любом случае я мог бы подобрать то, куда я ушел? –

+0

зависит от того, используете ли вы повторяющийся таймер или таймер с одним выстрелом. когда таймер недействителен, его fireDate по-прежнему содержит отметку времени последнего пожара. вы можете использовать это, чтобы сократить время для нового таймера. Если вы используете повторяющийся таймер, это будет немного сложнее, потому что вам нужно будет сделать таймер с одним выстрелом на оставшееся время в интервале, и только после этого повторите повторное повторение. –

+0

У меня в настоящее время он настроен на повторение –

0

Вам необходимо создать новый timer. К сожалению, вы не можете просто использовать fire, чтобы возобновить его.

func action() { 
//Paused 
timer.invalidate() 

let refreshAlert = UIAlertController(title: "Quit?", message: "Are you sure you want to quit?", preferredStyle: UIAlertControllerStyle.Alert) 

refreshAlert.addAction(UIAlertAction(title: "Yes!", style: .Default, handler: { (action: UIAlertAction!) in 
    //Quit 
})) 

refreshAlert.addAction(UIAlertAction(title: "No!", style: .Default, handler: { (action: UIAlertAction!) in 
    //Dismiss alert and resume game 
    print("Fire") 
    timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "timerOn", userInfo: nil, repeats: false) 
    refreshAlert.dismissViewControllerAnimated(true, completion: nil) 
})) 

Если и хочет возобновить timer, смотреть на этот вопрос: Resuming an NSTimer in Swift

Она включает в себя использование CADisplayLink, который является единственным способом, который может возобновить таймер.

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