• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Sprichwörter und Redewendungen sind das Thema unseres Monatswettbewerbes. Nähere Informationen dazu gibt es natürlich auch, und zwar auf dieser Seite ---> Klick

iPhone SDK - Animationsschleife

planetenring

Empire
Registriert
19.09.07
Beiträge
88
Hallo zusammen

Habe folgendes Problem:

Habe eine Animation programmiert, welche jedes Mal, wenn der Button gedrückt wird, zufällige X und Y Koordinaten erzeugt und dadurch die Grafik (in diesem Fall einen blauen Punkt) an einen beliebigen Punkt auf dem iPhone Bildschirm fahren lässt.

Nun suche ich eine Möglichkeit dies über eine While Scheife oder Ähnliches ablaufen zu lassen. Sprich der Button wird gedrückt und der Punkt fährt so lange willkürliche Punkte an, bis ein STOP Signal kommt.

Die While Schleife wird in meinem Programm auch durchlaufen, jedoch gewegt sich der Punkt nicht. Es scheint, als ob die Schleife so schnell gerechnet wird, dass Core Animation nicht mehr mitkommt.

Hat jemand eine Lösung dafür bzw. soetwas selbst schon programmiert?

Danke im Vorraus von einem verzweifelten iPhone Programmierer
 

The-Kenny

Transparent von Croncels
Registriert
22.05.08
Beiträge
307
Ohne zu wissen wie genau das gemacht wurde ist es natürlich etwas schwer.

Aber du kannst z.B. ein Delegate benutzen, was die Methode implementiert, die aufgerufen wird wenn eine CoreAnimation-Animation abgelaufen ist. Ich kenne zwar den Namen nicht auswendig, aber es gibt eine, da bin ich sicher.

Sobald die Animation abgelaufen ist, stößt du in dem Delegate einfach die nächste an, vorrausgesetzt natürlich das Stopsignal wurde in der Zwischenzeit nicht gesendet.
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Wie soll das denn gezeichnet werden?

Das Zeichnen erfolgt über die Run-Loop. So lange du in deiner while-Schleife bist, kommst du nicht zurück zur Run-Loop.

Die oben erwähnte Delegate-Methode nutzen oder etwa einen Timer versuchen.
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Jap, NSTimer ist wohl das richtige Stichwort. Wenn deine Animation noch dazu schön rund aussehen soll, nimm NSAnimation. Oder gleich CoreAnimation (gibts das aufm iPhone?), wie du willst - es gibt viele Möglichkeiten.

Beispiel für NSTimer:

Du definierst eine Methode für den Controller deines Views (-> MVC-Modell!), der zum Beispiel in Schritten die Koordinaten des rects, in dem der Punkt gezeichnet werden soll, verändert. Zum Beispiel so:

Code:
- (void)forwardAnimation:(NSTimer *)inAnimationTimer {
     myPointRect.origin.x += 2;
     myPointRect.origin.y += 4;
     // neu zeichnen ...
}

Du kannst mit einer Verzweigung (if) prüfen, ob der Punkt schon an den Zielkoordinaten angekommen ist, oder nicht. Wenn ja, Timer stoppen (-> Doku), sonst Werte ändern und weiter laufenlassen.

Du erstellst einen Timer für ca. 1/30 Sekunde Wiederholungsrate (wie das geht, selber nachlesen), der dann immer die obige Methode aufruft, voilà deine Animation.

So, genug Hilfe, das sollte reichen, nicht?

Viele Grüsse ppocket
 

CamDam

Doppelter Prinzenapfel
Registriert
15.06.08
Beiträge
439
Ohne Ahnung von objective c zu haben ...
... setz dich mal mit Mutex und Threads auseinander ;)