Pull To Refresh Progress View Schwierigkeiten

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

  • Pull To Refresh Progress View Schwierigkeiten

    Hallo Zusammen,

    Ich entwickle gerade eine App, die unter anderem einen pull to refresh view enthält. Wenn man den UITableView herunterzieht, gibt es einen progress view ähnliche Anzeige, die anzeigt, wie viel man noch ziehen muss, bis das Nachladen aktiviert wird. Das ist das Verhalten, das man von vielen Apps aus der App Store kennt.

    Nun zu meinem Problem,:
    Ich hab es ohne Problem geschafft, den progress view wie das erste Bild zeigt zu programmieren. Ich habe einfach den anchorPoint des CALayers der Nadel so eingestellt, dass sich die Nadel bei einer Rotation um den richtigen Punkt dreht. Ich will jedoch, dass der Nadel einen hellblauen Verlauf folgt, so wie es das zweite Bild zeigt. Dies ist mir jedoch nicht gelungen, da ich offensichtlich zuwenig Erfahrung mit solchen Animationen habe. Ich versuchte es, indem ich einen UIImageView mit dem Verlauf als Bild unter der Nadel herumdrehen lasse. Dabei hatte ich das Problem, dass der Verlauf natürlich auch ausserhalb des Halbkreises sichtbar war. Ich will jedoch, dass der Verlauf nur innerhalb des Meterhalbkreises sichtbar ist. Dies versuchte ich mit Masken und CALayers aber scheiterte kläglich. Wisst ihr, wie ich ein solches Problem lösen könnte? Danke für jegliche Hilfe!

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

  • Naja ist jetzt eigentlich nicht so schwer selber zu malen. Mach Dir ein MaskImage das überall weiß ist wo du den Balken zeichnen willst, der rest ist schwarz. Dann kannst du einfach direkt in den Kontext Deines Images zeichnen und von links nach rechts ausrechnen welche Farbe du an welche Stelle malst. Ist halt bisschen basic aber funktioniert.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

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

    Naja ist jetzt eigentlich nicht so schwer selber zu malen. Mach Dir ein MaskImage das überall weiß ist wo du den Balken zeichnen willst, der rest ist schwarz. Dann kannst du einfach direkt in den Kontext Deines Images zeichnen und von links nach rechts ausrechnen welche Farbe du an welche Stelle malst. Ist halt bisschen basic aber funktioniert.

    Gruß

    Claus

    Wie mach ich das mit der Maske richtig? Ich hab mir jetzt ein schwarz weisses Bild gemacht. Wenn ich jedoch CGContextClipToMask() brauche, passiert genau gar nichts.
    Mein Code:

    Quellcode

    1. CGContextTranslateCTM(ctx, 0.0f, CGRectGetHeight(bounds));
    2. CGContextScaleCTM(ctx, 1.0f, -1.0f);
    3. CGContextClipToMask(ctx, bounds, mask.CGImage);
    4. CGContextDrawImage(ctx, bounds, gradient.CGImage);

    Meiner Meinung nach sollte dieser Code genau nichts zeichnen, er zeichnet aber gradient ohne Probleme oder abgeschnittene Ecken.
  • Thallius schrieb:

    Ich dachte auch eher du zeichnest selber in den Context und nimmst nicht irgendwelche fertigen Maskierungsfunktionen

    Gruß

    Claus


    Hm dann versteh ich dein vorheriger Vorschlag nicht ganz. Wie soll ich dann genau den Verlauf in das Bild zeichnen, ohne dass der Verlauf aus dem Bild kommt? Und was bringt mir dabei ein Mask Image, wenn ich es nicht zum ausschneiden brauche?
  • Ganz einfach:

    Du erzeugst dir aus dem Bild wo du den verlauf reinmalen willst eine Bitmap Das gleiche machst du mit Deinem MaskenImage. Nun gehst du mit einer (oder mehreren) Schleifen durch jedes Pixel und sezt entsprechend der Maske die Pixel mit dem Verlauf. Du fängst also z.B. links an mit dunkelblau und interpolierst dann bis zum rechten Endpunkt (der ja vm Zeiger gegeben ist) bis zum helleren Blau.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

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

    Ganz einfach:

    Du erzeugst dir aus dem Bild wo du den verlauf reinmalen willst eine Bitmap Das gleiche machst du mit Deinem MaskenImage. Nun gehst du mit einer (oder mehreren) Schleifen durch jedes Pixel und sezt entsprechend der Maske die Pixel mit dem Verlauf. Du fängst also z.B. links an mit dunkelblau und interpolierst dann bis zum rechten Endpunkt (der ja vm Zeiger gegeben ist) bis zum helleren Blau.

    Gruß

    Claus

    Okay, jetzt weiss ich was du meinst. Ich muss jedoch zugeben, dass ich das noch nie gemacht habe. Kennst du ein gutes Toturial dazu? Ist das überhaupt genug effizient? Am schluss sollte es ja eine Animation werden.
  • Naja das System mach im Endeffekt ja auch nichts anderes :)

    tutorial weiß ich gerade nicht. Aber Du kannst Dir gerne mal meinen ColorPicker auf GitHub ansehen. Da mache ich das auch so. (Ist allerdings schon recht alter Code und sicher nicht der beste den ich je geschrieben habe :)

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

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

    Naja das System mach im Endeffekt ja auch nichts anderes :)

    tutorial weiß ich gerade nicht. Aber Du kannst Dir gerne mal meinen ColorPicker auf GitHub ansehen. Da mache ich das auch so. (Ist allerdings schon recht alter Code und sicher nicht der beste den ich je geschrieben habe :)

    Gruß

    Claus


    Okay, aber was ist der unterschied dazu, eine mask zu erstellen und mit CGContextClipToMask() den Context zu zuschneiden?
  • Thallius schrieb:

    Dann brauchst du ja wieder zig MAsken damit du für jedes Bild der aNimation eine eigene hast oder verstehe ich jetzt was falsch ?

    Nein, ich hätte den Verlauf um das Zentrum des Halbkreises gedreht. Wie würde ich das den mit der Pixelinterpolation machen?