2010-12-28 9 views
1

Ich habe einen Timer, der in viewDidLoad startet, die wie dieseÄndern NSTimer Geschwindigkeit mit Variable?

[NSTimer scheduledTimerWithTimeInterval:0.001f target:self selector:@selector(Dragon:) userInfo:nil repeats:YES];

ich aussieht möchte in der Lage zu meinem Intervall mit einer variablen zu ändern. Aber jedes Mal, wenn ich versuche, eine Variable zu setzen, wo die 0.001f ist, bekomme ich Fehler ... irgendwelche Ideen?

+0

Es sollte kein Problem sein, mit in einem 'float' Variable in dieser Methode übergeben, welche Fehler Sie erhalten, ? –

+0

Versuchen Sie 0,01f, was ist der genaue Fehler? – WrightsCS

+0

Whoops Ich benutzte einen int und nicht einen float * errötet * Ich verwende diesen Timer, um die Geschwindigkeit eines Charakters zu steuern, den ich bewegt habe ... Sobald ich die App schließe und sie wieder öffne, wird die Zeichengeschwindigkeit nicht auf den Standard zurückgesetzt , wie repariere ich das jetzt? –

Antwort

2

Ich habe eine App, die genau das tut, was Sie fragen. Ich erlaube dem Benutzer, die Geschwindigkeit des Timers innerhalb der App zu ändern, also muss ich diese Geschwindigkeit zu einer Variable machen. Hier ist, wie ich es gemacht habe:

  1. Ich erstelle eine Timer-Eigenschaft auf meiner Hauptansicht Controller-Klasse.

  2. Ich initialisiere den Timer, wenn die Hauptansicht Controller-Klasse lädt.

  3. Jedesmal danach mache ich meinen Timer ungültig und setze ihn zurück, wenn sich der Wert ändert.

einige Auszüge aus dem Inneren meiner Haupt-View-Controller .m-Datei:

//How often to switch views (float) 
    #define kInterval [[NSUserDefaults standardUserDefaults] integerForKey:@"interval"] 

- (void) viewDidAppear:(BOOL)animated{ 
    [self setTimer]; 
} 

- (void) setTimer{ 
    [self.timer invalidate]; 
    [self setTimer: [NSTimer scheduledTimerWithTimeInterval:kInterval target:self selector:@selector(timerFired) userInfo:nil repeats:YES]]; 
} 
+0

Vielleicht möchten Sie den Methodennamen in 'resetTimer' ändern, aber +1 trotzdem. –

+0

Ich benutze dies zunächst, also nannte ich es setTimer. Ich sollte dort allerdings für einen Null-Timer einchecken. – Moshe

0

Kommt die App von einem Hintergrundprozess zurück? In diesem Fall müssen Sie möglicherweise den Timer neu einstellen. Vielleicht möchten Sie auch auf CADisplayLink peek: http://developer.apple.com/library/ios/#documentation/QuartzCore/Reference/CADisplayLink_ClassRef/Reference/Reference.html%23//apple_ref/doc/uid/TP40009031

+0

Wie setzt man einen Timer zurück? Ich denke, ich muss den Timer jedes Mal zurücksetzen, wenn der Schwimmer, den ich habe, das Inkrement ändert, ändert sich ... –

+0

Pflegen Sie einen Verweis darauf. Dann, wenn es angebracht ist, "ungültig machen" und einen Timer mit der neuen Variable neu erstellen. – joshpaul

+0

Wie würde ich eine Referenz darauf beibehalten ... Entschuldigung, ich habe noch nie mit Timern gearbeitet: o und ich kann es in der Dokumentation nicht finden danke für alle Hilfe bis jetzt –

0

@King Popsicle Sie Hilfe dieser Methode nehmen

  • (void) applicationWillEnterForeground: (UIApplication *) Anwendung oder
  • (void) applicationDidBecomeActive :(UIApplication *) Anwendung

Sie können die Dinge in dieser Methode beheben die Timer-Werte in Bezug auf :)