2016-07-31 2 views
0

Я разрабатываю таймер обратного отсчета в своем приложении, но я не знаю, почему он не работает.Таймер обратного отсчета swift

let formatter = NSDateFormatter() 
let userCalendar = NSCalendar.currentCalendar() 
let requestedComponent: NSCalendarUnit = [ 
//NSCalendarUnit.Month, 
//NSCalendarUnit.Day, 
NSCalendarUnit.Hour, 
NSCalendarUnit.Minute, 
NSCalendarUnit.Second 

] 

    func printTime() 
{ 
    formatter.dateFormat = "MM/dd/yy hh:mm:ss a" 
    //let startTime = NSDate() 
    let startTime = formatter.dateFromString("05/12/16 0:00:00 a") 
    let endTime = formatter.dateFromString("12/25/16 8:00:00 a") 
    let timeDifference = userCalendar.components(requestedComponent, fromDate: startTime!, toDate: endTime!, options: []) 
    TimeLabel.text = " \(timeDifference.hour)Hours \(timeDifference.minute)Minutes \(timeDifference.second) Seconds" 
} 


    let timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(printTime), userInfo: nil, repeats: true) 
    timer.fire() 

Если я уеду:

let startTime = NSDate() 

и комментарии

let startTime = formatter.dateFromString("05/12/16 0:00:00 a") 

это работает прекрасно, но это начинается с текущего времени и даты на данный момент. Мне нужна конкретная дата и время, в моем случае это «05/12/16 0:00:00 a», и время должно начинать отсчет с этой даты и часа, а не с этого момента.

+0

Не используйте 'dateFromString' для формирования даты. Используйте компоненты даты. – matt

ответ

1

Причина, по которой ничего не происходит, заключается в том, что вы всегда сравниваете одни и те же даты: startTime и endTime. Разница между этими двумя датами всегда будет одинаковой. Если вы хотите, чтобы был постепенный обратный отсчет, вам нужно соответствующим образом изменить один или другой. Причина, по которой работает NSDate(), заключается в том, что startTime меняется на любую текущую дату.

+0

Большое спасибо. Я это прекрасно понял. В моем случае я хочу отключить кнопку в течение 8 часов (08:00:00), и когда это время закончится, я хочу снова включить кнопку. У вас есть идея, как это сделать? –

+0

Я бы сделал что-то, где вы храните время, когда кнопка должна быть снова включена как «NSDate» где-то, и регулярно проверяйте, является ли значение 'timeIntervalSinceNow()' этой даты более чем 0. Если это не так, кнопка может быть снова включена. – Arclite

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