Verzweiflung durch einen Countdown

  • Verzweiflung durch einen Countdown

    Hey, ich versuche seit heute früh einen Countdown zu basteln.
    Wenn ich von 0 hochzählen will funktioniert alles, auch runter zu. Format: mm:ss:SSSS
    Wenn ich aber runter zähle, dann startet er auch bei 0, aber der nächste Schritt ist dann 59:59:9999 (ich weiß nicht ob die 4 neunen stimmen, was aber irrelevant ist :) )
    Aber wie kann einen Startwert von 20 Sekunden festlegen. Ich möchte, dass der counter von 20 auf 0 sekunden runter zählt (mit millisekunden anzeige!!!!)

    Ich habe keine idee mehr es wär super wenn ihr mir sagen könntet, wie man das angehen kann.
    DANKE!!!!!!!
  • Habe ich erwähnt dass es fürs iphone ist :D Sieht recht kompliziert aus.
    Aber da rechnet man ja auch extra Sekunden, Minuten aus, MUSS man das machen?

    Quellcode

    1. [textField setStringValue:[NSString stringWithFormat:@"%02i:%02i:%02i", hours, ABS(minutes), ABS(seconds)]];

    Kann ich so wirklich ein String in ein date Typ umwandeln?
  • _max321_ schrieb:

    Habe ich erwähnt dass es fürs iphone ist

    Nö, aber eigentlich hast Du ja gar keine Details erwähnt oder gar Code gepostet ... was vielleicht hilfreich wäre.

    iOS hatte ich mir aufgrund des Forums schon gedacht, aber bei derartigen Dingen ist das nahezu egal. Aber zu Deinem Problem: Habe ich richtig verstanden, dass Du ein NSDate herunterzählst und bei der Ausgabe dann nur die Minuten / Sekunden / Millisekunden ausgeben lässt? Wie sollte denn dann eine Zeit aussehen, wenn Du bei 00:00.000 startest und herunter zählst? Ich habe es mir einfach gemacht und meine kleinste Einheit als Integer gehalten, dekrementiert und formatiert ... das sparte mir für diesen Quickie das NSDate-Geraffel: Ich fand's übersichtlicher. Wenn Du den anderen Weg gehst, sollte das kein Problem sein, aber beim Herunterzählen würde ich einen Startwert > 0 erwarten.

    Also: Mehr Infos...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ich habe mal die Textcodes zusammengestellt die ich habe:

    Quellcode

    1. function 1{..... startDate = [[NSDate date] retain]; //startDate ist das Problem, das würde ich gerne irgendwie auf 20 sekunden setzten (00:20:0000)
    2. Timer = [NSTimer scheduledTimerWithTimeInterval:1.0/100.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];.....}
    3. -(void)updateTimer {
    4. NSDate *currentDate = [NSDate date];
    5. NSTimeInterval timeInterval = -[currentDate timeIntervalSinceDate:startDate]; //negatives Intervall, also wird runter gezählt
    6. NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
    7. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    8. [dateFormatter setDateFormat:@"mm:ss:SSSS"];
    9. [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
    10. NSString *timeString = [dateFormatter stringFromDate:timerDate];
    11. labelStopWatch.text = timeString;
    12. [dateFormatter release];
    13. }
    Alles anzeigen
  • Verstehe ich jetzt irgendwie nicht: Du willst einen Countdown und nimmst die Zeitspanne von einem Startzeitpunkt bis jetzt negativ? Wie zählst Du denn einen Counter herunter? Also Dein Code liefert sowas wie -10, -11, -12, -13, ... bei mir sähe das anders aus :D

    Ich würde mir am Anfang die Zielzeit setzen, also aktuelle Zeit plus Dauer des Countdowns. Dann würde ich beim Aktualisieren immer die Differenz zwischen aktueller Zeit und Zielzeit bilden und ausgeben.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Naja ich habe die funktion 1 und da habe ich den Timer.
    in der funktion update Timer rechne ich dann STARTDATE minus intervall und das will ich immer ausgeben.
    Also müsste ich nur STARTDATE ändern.
    Und das mit dem "am Anfang die Zielzeit setzten" möchte ich ja in der Variable STARTDATE.
  • Du möchtest meine Meinung: Weniger schnell tippen, erst einmal nachdenken ... Überlege Dir mal jenseits von Objective-C, iPhone o. ä., wie ein Countdown aussehen sollte ... Und wenn Dein "StartDate" ein "EndDate" ist, solltest Du es vielleicht auch so nennen. Ansonsten könnte Dir die Methode "initWithTimeInterval:sinceDate:" helfen, einen Zeitpunkt in der Zukunft in Start- / EndDate zu speichern.

    Ich überlasse Dich jetzt dem Knobeln, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • meinst du sowas?

    Quellcode

    1. - (void)setupGame{
    2. seconds = 20;
    3. count = 0;
    4. timerLabel.text = [NSString stringWithFormat:@"Time: %i",seconds];
    5. label.text = [NSString stringWithFormat:@"Score\n%i",count];
    6. timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(subtractTime) userInfo:nil repeats:YES];
    7. }
    8. - (void)subtractTime{
    9. seconds--;
    10. timerLabel.text = [NSString stringWithFormat:@"Time: %i",seconds];
    11. if(seconds == 0){
    12. [timer invalidate];
    13. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ZEIT IST UM!" message:[NSString stringWithFormat:@"You scored %i points",count] delegate:self cancelButtonTitle:@"Play Again" otherButtonTitles:nil];
    14. [alert show];
    15. }
    16. }
    Alles anzeigen
  • Vielleicht so ?

    Quellcode

    1. - (void)viewDidLoad
    2. {
    3. [super viewDidLoad];
    4. self.interval = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES];
    5. sekunden = 3;
    6. milliSekunden = 0;
    7. [self.interval fire];
    8. }
    9. -(void)updateTimer:(NSTimer*)theTimer
    10. {
    11. if (milliSekunden == 0)
    12. {
    13. sekunden = sekunden - 1;
    14. milliSekunden = 99;
    15. }
    16. else
    17. {
    18. milliSekunden = milliSekunden - 1;
    19. }
    20. NSLog(@"ZEIT=%02i:%02i", sekunden, milliSekunden);
    21. if (sekunden == 0 && milliSekunden == 0)
    22. {
    23. [theTimer invalidate];
    24. }
    25. }
    Alles anzeigen