Activity Indicator View - Best Practice?

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

  • Activity Indicator View - Best Practice?

    Holla,

    ich denke gerade darüber nach, was der beste Weg wäre, einen generellen Activity Indicator View in einer App umzusetzen. Dieser View soll eigentlich nur den UIActivityIndicator (großer Typ), vielleicht einen halptransparenten Hintergurnd und etwas Text enthalten.

    Knackpunkt ist aber, dass dieser View(Controller) von allen Ecken und Enden der App erreichbar sein soll - oder zumindest soll von allen möglichen Stellen aus angemeldet werden können, dass nun etwas Längeres startet und wann es beendet ist.

    An welcher Stelle würdet Ihr diese Funktionalität ansiedeln - beim AppDelegate?
    Wie würdet Ihr den View anzeigen - als nicht animierten modalen View?
    Wenn dort, wie dann präsentieren - das AppDelegate ist je kein ViewController ...?
  • Hmm, ja. Im Moment hakt es aber leider beim Anzeigen. Ich tacker den View bei Bedarf als subView an die window-Property meines AppDelegate und bringe ihn mit [window bringSubViewToFront: ...] nach vorn. Nur leider sehe ich nichts.

    Und wenn ich die hidden-Property verwende, als den View nur beim Laden anhänge und ein- und ausblende, so kann ich ihn zwar aus- nicht aber wieder einblenden, was ich etwas unpraktisch finde.

    Irgendwie habe ich noch einen Knoten.
  • Dir ist aber das Prinzip des Indicators schon klar, oder ?

    Also das ganze funktioniert nur, wenn Du Deine Berechnung (oder was auch immer) die eben lange dauert in einem Background Task machst, während der Indikator in Main Task läuft.
    Wenn Du im MAintask rechnest, dann bewegt sich der Indikator kein Stück (oder wie bei Dir wird er erst gar nicht angezeigt), weil ja die App gar nicht in die RunLoop kommt, wo das UI refreshed wird.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Ja, da ist was dran.

    OK, der konkrete Fall ist folgender: Ich kommuniziere in einer Methode mit einem Hardware Add-on, das vergleichsweise träge ist. Ich schreibe dort Werte aus einem Array (eine Property des kapselnden Objecktes) in das Gerät und mache das mit einer for-Schleife. Ich rufe vorher die "mach den Indikator an"-Methode auf und hinter die "mach ihn wieder aus"-Methode. Das klatschende Geräusch meiner Hand auf meiner Stirn besagt dabei, dass ich in der Tat nicht in den Runloop zurück komme.

    Ein weiteres Hmm. Gut, ich werde versuchen, den Aufruf etwas anders zu kapseln.
  • Thallius schrieb:

    Dir ist aber das Prinzip des Indicators schon klar, oder ?

    Also das ganze funktioniert nur, wenn Du Deine Berechnung (oder was auch immer) die eben lange dauert in einem Background Task machst, während der Indikator in Main Task läuft.
    Wenn Du im MAintask rechnest, dann bewegt sich der Indikator kein Stück (oder wie bei Dir wird er erst gar nicht angezeigt), weil ja die App gar nicht in die RunLoop kommt, wo das UI refreshed wird.

    Nicht ganz. Wenn die Animation des Activity Indicator View einmal gestartet wurde und die App in den Main Thread zurück kehr so dass der Activity Indicator View auch angezeigt wird, dann bewegt sich dieser auch dann, wenn der Main Thread daraufhin mit einer längeren Aufgabe beschäftigt ist. Das Problem mit dem Activity Indicator View ist meist, dass dieser nicht angezeigt wird, da die App nicht lange genug oder überhaupt nicht in den Main Thread zurück kommt.

    iOS ist leider sehr lazy bei der Aktualisierung der UI-Elemente.
  • MCDan schrieb:

    Thallius schrieb:

    Dir ist aber das Prinzip des Indicators schon klar, oder ?

    Also das ganze funktioniert nur, wenn Du Deine Berechnung (oder was auch immer) die eben lange dauert in einem Background Task machst, während der Indikator in Main Task läuft.
    Wenn Du im MAintask rechnest, dann bewegt sich der Indikator kein Stück (oder wie bei Dir wird er erst gar nicht angezeigt), weil ja die App gar nicht in die RunLoop kommt, wo das UI refreshed wird.

    Nicht ganz. Wenn die Animation des Activity Indicator View einmal gestartet wurde und die App in den Main Thread zurück kehr so dass der Activity Indicator View auch angezeigt wird, dann bewegt sich dieser auch dann, wenn der Main Thread daraufhin mit einer längeren Aufgabe beschäftigt ist. Das Problem mit dem Activity Indicator View ist meist, dass dieser nicht angezeigt wird, da die App nicht lange genug oder überhaupt nicht in den Main Thread zurück kommt.

    iOS ist leider sehr lazy bei der Aktualisierung der UI-Elemente.


    Ja ok, so wars aber auch von mir gemeint.
    Aber wie man es auuch dreht, man sollte Berechnung o.ä. die lange dauern immer in einem Background Task machen und im MainTask den Indikator und möglichst sogar noch einem Abbruch Button.

    Wenn ich auch nicht viel Ahnung vom Mac und iOs habe. so habe ich doch über 20 Jahre Erfahrung in der Entwicklung von zeitkritischer multitasking Software und multitasking Betriebssystemen :)

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

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