2009-10-06 7 views
10

Mam uilabel i uislider na widoku. Chcę ustawić czas etykiety za pomocą suwaka. Zakres suwaka to 00:00:00 do 03:00:00. oznacza 3 godziny.i interweniowanie na suwak wynosi 0,5 minuty.Jak też pokazać.i chcesz, aby timer działał, nawet jeśli aplikacja jest zamknięta.jak pokazać odliczanie uilabel w iphone?

Odpowiedz

40

Po pierwsze, nie można utrzymać licznika czasu po zamknięciu aplikacji. Aplikacje działające w tle po prostu nie są dozwolone na telefonie iPhone. Istnieją sposoby na sfałszowanie go za pomocą licznika czasu (zapisywanie znacznika czasu, gdy aplikacja się kończy, i sprawdzanie go w stosunku do czasu, kiedy zaczyna się tworzenie kopii zapasowych), ale nie zajmie się przypadkiem, w którym skończy się czas, zanim aplikacja zostanie uruchomiona z powrotem w górę.

Jeśli chodzi o aktualizowanie UILabel z odliczaniem, prawdopodobnie zadziałałby NSTimer. Coś jak to, zakładając, że masz czasomierza NSTimer int secondsLeft i UILabel countdownLabel w swojej klasie:

utworzyć Timer:

timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats: YES]; 

metody updateCountdown:

-(void) updateCountdown { 
    int hours, minutes, seconds; 

    secondsLeft--; 
    hours = secondsLeft/3600; 
    minutes = (secondsLeft % 3600)/60; 
    seconds = (secondsLeft %3600) % 60; 
    countDownlabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds]; 
} 

I zrób coś podobnego w jednej z moich aplikacji, ale nie masz teraz w tej chwili dostępu do kodu.

+0

co jest wartością secondsLeft. –

+0

To byłaby liczba sekund, o których licznik ma działać, najprawdopodobniej w innym miejscu, w oparciu o wartość UISlider. –

+0

jak powiedział Shawn, nie można utrzymywać licznika czasu po zamknięciu aplikacji, więc upewnij się, że śledzisz czas rozpoczęcia, kiedy Twoja aplikacja wysyła powiadomienie UIApplicationWillTerminateNotification (myślę, że to wszystko, jestem zardzewiały). Jedynym sposobem obejścia tego zegara, gdy aplikacja nie działa, jest użycie powiadomienia push. ale to może stać się drogie. – pxl

2

Ten kod jest niepoprawny.

timer = [NSTimer scheduledTimerWithInterval: 1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats: YES]; 

To powinno być.

timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats: YES]; 
0

można zachować swój bieg zegara, gdy wniosek nie wchodzi tło,

jak @shawn Craver powiedziano u nie można to zrobić, ale można to zrobić, gdy aplikacja wejdzie w tle („nie kończy”) jest to inne zdarzenie applicationDidEnterBackground , a do tego będziesz potrzebował wielowątkowego GCD (grand central dispatch).

pluskać patrz link

set a timer in ios