2015-08-14 3 views
-2

Я только что сделал секундомер с учебником, но то, что я хотел бы сделать, - это обновить мою метку 00:00 в течение 1 секунды, например, 00:01, 00:02: 00:03 и делать то же самое в течение нескольких минут. Есть ли способ сделать это? Заранее спасибо!Обновление от NSTimer до 4-значного знака

+4

Есть ли вообще что-то делать? Да. Предоставьте код, который вы пробовали, и почему он не работает, написанный код - это то, что делают разработчики. SO - это помощь с кодом, а не с кодом. – zaph

ответ

-1

Это Objective-C, но вы получите идею:

-(void) updateTotalTime 
{ 
int forHours = timeInSeconds/3600, 
remainder = timeInSeconds % 3600, 
forMinutes = remainder/60, 
forSeconds = remainder % 60; 

[elapsedTime setString:[NSString stringWithFormat:NSLocalizedString(@"elapsedTime", nil) 
         ,forHours 
         ,forMinutes 
         ,forSeconds]]; 

} 

и в моих Localizable.strings:

"elapsedTime" = "Time: %02d:%02d:%02d"; 
+1

-1 для ObjC, -1 для NSLocalizedString, не запрашивался, -100 для просто кода, когда OP не показывал никакого кода или усилий. – zaph

5

Тогда вы должны получить дату которого требуется начать подсчет из которого является текущей датой, когда происходит конкретное событие, скажем, мы начнем таймер при появлении представления, поэтому реализуем viewWillAppear следующим образом:

var currentDate = NSDate() 

override func viewWillAppear(animated: Bool) { 

    currentDate = NSDate() 

    var timer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "updateLabel", userInfo: nil, repeats: true) 

    timer.fire() 

} 

и реализовать функцию updateLabel:

func updateLabel() { 

    dispatch_async(dispatch_get_main_queue(), {() -> Void in 

     var elapsedSeconds: NSTimeInterval = -self.currentDate.timeIntervalSinceNow 

     let minutes: Int = Int(elapsedSeconds)/60 
     let seconds: Int = Int(elapsedSeconds) - (minutes*60) 

     self.timeLabel.text = String(format: "%02d:%02d", minutes, seconds) 

    }) 

} 
+1

OP может использовать таймер. См. Обновленный комментарий выше разницы WRT между двумя датами. Путь к чрезмерному мышлению для простого вопроса. – zaph

+0

Это то же самое, ведь вы перевернете это времяInterval в секунды. – Firas

+0

Учтите, что переменная обновляется по каждому обратному вызову таймера, дата никогда не указана. – zaph

0

Когда время форматирования истекло, NSDateComponentsFormatter другой вариант:

var start: CFAbsoluteTime! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    start = CFAbsoluteTimeGetCurrent() 
    NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "handleTimer:", userInfo: nil, repeats: true) 
} 

lazy var formatter: NSDateComponentsFormatter = { 
    let _formatter = NSDateComponentsFormatter() 
    _formatter.allowedUnits = .CalendarUnitMinute | .CalendarUnitSecond 
    _formatter.zeroFormattingBehavior = .Pad 
    return _formatter 
}() 

func handleTimer(timer: NSTimer) { 
    let elapsed = CFAbsoluteTimeGetCurrent() - start 
    label.text = formatter.stringFromTimeInterval(elapsed) 
} 

Правда, это даст вам время, прошедшее в 0:00 формате, не 00:00 формате.

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

  • Нет связанных вопросов^_^