Ausgabe und gleichzeitiges scrollen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ausgabe und gleichzeitiges scrollen

    Hallo Zusammen,

    da das mein erster Post ist :

    Seit diesem Jahr beschäftige ich mit IOS Programmierung, habe mir auch ein Buch angeschafft und gefährliches Halbwissen gesammelt. Selbstverständlich hab ich hier im Forum schon viele Posts gefunden die mir weitergeholfen haben.
    Mein erstes Übungsprojekt ist eine Stoppuhr. Funktioniert soweit.

    Meine Frage: Ich gebe in der Timermethode die Zeit (mit Zehntel) in einem Textlabel aus, die "Rundenzeit" in ein Textview. Beim scrollen im Textview findet keine Ausgabe im Textfeld statt, die Zeitzählung intern läuft korrekt weiter und wird wieder bei Ende scrollen auch in dem Texlabel ausgegeben. Das funktioniert bei der Apple Stoppuhr aber gleichzeitig. Einen Tableview hab ich auch schon ausprobiert hat aber das gleiche Ergebnis.
    Was mach ich falsch ?

    Gruß
  • Morgen Eizen,
    könnte ich den den Code sehen tu mir schwer nur an hand dieser Informationen den Fehler zu finden.

    Edit: ich brauche echt immer zu lang zum schreiben ^^ jetzt war macmoonshine schon schneller
  • Marius Hartig schrieb:

    Morgen Eizen,
    könnte ich den den Code sehen tu mir schwer nur an hand dieser Informationen den Fehler zu finden.

    Edit: ich brauche echt immer zu lang zum schreiben ^^ jetzt war macmoonshine schon schneller


    Versuch es erst gar nicht. Moon ist IMMER schneller :)

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Marius Hartig schrieb:

    Morgen Eizen,
    könnte ich den den Code sehen tu mir schwer nur an hand dieser Informationen den Fehler zu finden.

    Edit: ich brauche echt immer zu lang zum schreiben ^^ jetzt war macmoonshine schon schneller


    Versuch es erst gar nicht. Moon ist IMMER schneller :)

    Gruß

    Claus


    Ich dachte ich hätte zeit weil keiner online war außer ich, jetzt habe ich gelernt das man sich auf die onlineanzeige nicht verlassen kann !
    :D
  • Marius Hartig schrieb:

    Thallius schrieb:

    Marius Hartig schrieb:

    Morgen Eizen,
    könnte ich den den Code sehen tu mir schwer nur an hand dieser Informationen den Fehler zu finden.

    Edit: ich brauche echt immer zu lang zum schreiben ^^ jetzt war macmoonshine schon schneller


    Versuch es erst gar nicht. Moon ist IMMER schneller :)

    Gruß

    Claus


    Ich dachte ich hätte zeit weil keiner online war außer ich, jetzt habe ich gelernt das man sich auf die onlineanzeige nicht verlassen kann !
    :D


    Ich glaube Moon ist in Wirklichkeit ein Bot ;)

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Marius Hartig schrieb:

    Thallius schrieb:

    Marius Hartig schrieb:

    Morgen Eizen,
    könnte ich den den Code sehen tu mir schwer nur an hand dieser Informationen den Fehler zu finden.

    Edit: ich brauche echt immer zu lang zum schreiben ^^ jetzt war macmoonshine schon schneller


    Versuch es erst gar nicht. Moon ist IMMER schneller :)

    Gruß

    Claus


    Ich dachte ich hätte zeit weil keiner online war außer ich, jetzt habe ich gelernt das man sich auf die onlineanzeige nicht verlassen kann !
    :D


    Ich glaube Moon ist in Wirklichkeit ein Bot ;)

    Gruß

    Claus


    Oder eine Firma mit 50 Mitarbeitern :D
  • Sooo, da bin ich wieder.
    Hier mal das Machwerk - Im IB gibt's die entsprechen Buttons, die beiden Textlabel und den TextView.

    der Timer:

    Quellcode

    1. - (void)timerSteuerung
    2. {
    3. if (_timerGo)
    4. {
    5. _startDate = [NSDate date];
    6. _activeTimer = [NSTimer scheduledTimerWithTimeInterval: 0.03 target:self selector:@selector(displayTimer:) userInfo:nil repeats:YES];
    7. _timerGo = NO;
    8. }
    9. if (_timerStop)
    10. {
    11. [_activeTimer invalidate];
    12. _timerStop = NO;
    13. }
    14. }
    Alles anzeigen


    und die Methode:


    Quellcode

    1. - (void) displayTimer:(NSTimer*)Timer
    2. {
    3. NSTimeInterval _timeInterval = -[_startDate timeIntervalSinceNow] + _bereitsGelaufeneZeit;
    4. int sekunde = ((int)_timeInterval) % 60;
    5. int minute = ((int) (_timeInterval - sekunde) / 60 ) % 60;
    6. int stunde = ((int) _timeInterval - sekunde - 60 * minute) / 3600;
    7. int hundertstel = (int)((_timeInterval - (int)_timeInterval) * 100);
    8. self.stoppuhrAnzeige.text = [NSString stringWithFormat:@"%02d:%02d:%02d",stunde,minute,sekunde];
    9. self.stoppuhrAnzeigeHundertstel.text = [NSString stringWithFormat:@".%02d",hundertstel];
    10. _merkenZeitstempel = _timeInterval;
    11. float timeIntervalSplit = _timeInterval - _merkenZeitstempelfuerSplit;
    12. sekunde = ((int)timeIntervalSplit) % 60;
    13. minute = ((int) (timeIntervalSplit - sekunde) / 60 ) % 60;
    14. stunde = ((int) timeIntervalSplit - sekunde - 60 * minute) / 3600;
    15. hundertstel = (int)((timeIntervalSplit - (int)timeIntervalSplit) * 100);
    16. _merkenZeitstempelFuerRacetimekorrektur = timeIntervalSplit;
    17. _merkenZeitstempelfuerRacetime = _timeInterval + 0.03;
    18. if (_triggerSplitButtonPressed)
    19. {
    20. float timeIntervalSplit = _timeInterval - _merkenZeitstempelfuerSplit;
    21. int sekundeSplit = ((int)timeIntervalSplit) % 60;
    22. int minuteSplit = ((int) (timeIntervalSplit - sekundeSplit) / 60 ) % 60;
    23. int stundeSplit = ((int) timeIntervalSplit - sekundeSplit - 60 * minuteSplit) / 3600;
    24. int hundertstelSplit = (int)((timeIntervalSplit - (int)timeIntervalSplit) * 100);
    25. if (self.merkenZeitstempelfuerFastLap > timeIntervalSplit)
    26. {
    27. self.merkenZeitstempelfuerFastLap = timeIntervalSplit;
    28. _merkenRundeVonFastLap = _counterSplitButtonPressed;
    29. }
    30. self.splitLogFenster.text = [NSString stringWithFormat:@"%003d: %02d:%02d:%02d.%02d @ %02d:%02d:%02d.%02d\n%@",_counterSplitButtonPressed,stundeSplit,minuteSplit,sekundeSplit,hundertstelSplit,stunde,minute,sekunde,hundertstel,self.splitLogFenster.text];
    31. _triggerSplitButtonPressed = NO;
    32. _merkenZeitstempelfuerSplit = _timeInterval;
    33. }
    34. }
    Alles anzeigen


    Versuchsweise hab ich das Interval mal auf 1.00 gestellt - auch gleiches Ergebnis :|
  • noch zur Problembeschreibung:
    Die Ausgabe steht, wenn der Textview scrollen muss. Wenn noch nicht genug Zeilen ausgegeben sind, so dass ein scrollen nicht möglich/notwendig ist, haben Aktionen innerhalb des Textview keine Auswirkungen. Das ist im Simulator wie auch auf dem Phone so.
  • Habe jetzt mal den Timer, die Methode und die Textausgabeaktionen in eine eigene Klasse ausgelagert.

    Nutzt auch nix :/ ?(

    ...und nochmal die Methode auf das Allernötigste gekürzt und das Interval auf 0.9 gesetzt.

    Nutzt auuuch nix <X

    Hab heute keine Lust mehr.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von EiZen ()

  • Ich tippe mal auf den Runloop-Mode. Du verwendest scheduledTimerWithInterval:, der den Timer in der aktuellen Runloop (also hoffentlich der Haupt-Runloop) im Default-Modus registriert. Während des Scrollens ist der Haupt-Runloop aber nicht im Default Mode, sondern im Event Tracking Mode. Ergebnis: Der Timer wird während des Scrollens nicht aufgerufen.

    Probier' mal statt

    Quellcode

    1. _activeTimer = [NSTimer scheduledTimerWithTimeInterval: 0.03 target:self selector:@selector(displayTimer:) userInfo:nil repeats:YES];

    folgendes:

    Quellcode

    1. _activeTimer = [NSTimer timerWithTimeInterval: 0.03 target:self selector:@selector(displayTimer:) userInfo:nil repeats:YES];
    2. [[NSRunLoop currentRunLoop] addTimer:_activeTimer forMode:NSRunLoopCommonModes];
    Multigrad - 360°-Produktfotografie für den Mac
  • @mattik

    Ich habe mir das jetzt nicht alles durchgelese nur deine sehr interessante Antwort. Wozu braucht es denn überhaupt diese addTimer? Der Timer läuft doch eh ganz normal im Hintergrund und feuert das angegeben Target/SElector wenn er fertig ist. Wozu muss ich den explizit in die runloop hängen?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)