2009-08-22 6 views
0

Ich verwende Page Control example von Apple. Ich konnte mit diesem Code unten in der App selbst Sound abspielen, aber aus irgendwelchen Gründen ging der Sound früher als eine Seite aus, bevor er auf die Seite kam, auf der ich meinen Sound für die automatische Wiedergabe eingestellt habe.Wie kann ich den Ton wiederverwenden und warum ist mein Ton von einer Seite verschwunden, bevor er die gewünschte Seite erreicht hat?

- (void)viewDidLoad { 
    pageNumberLabel.text = [NSString stringWithFormat:@"Page %d", pageNumber + 1]; 
    self.view.backgroundColor = [MyViewController pageControlColorWithIndex:pageNumber]; 

if (pageNumber == 3) { 

     NSString *clapPath = [[NSBundle mainBundle] pathForResource:@"nearSound" ofType:@"caf"]; 
     CFURLRef clapURL = (CFURLRef) [NSURL fileURLWithPath:clapPath]; 
     AudioServicesCreateSystemSoundID(clapURL, &testID); 
     AudioServicesPlaySystemSound(testID); 
} 

angeblich Also, wenn ich auf Seite 4 (Seitennummer == 3) bewegen, wird der Ton gespielt werden, aber es wurde auf Seite 3 gespielt (Seitennummer == 2), frage ich mich, warum das so ist?

Wenn es nicht gelöst werden kann, muss ich wahrscheinlich die Problemumgehung dann machen, legen Sie den Ton vor jeder Seite, die ich Sound einfügen möchte.

Wie kann ich den Ton erneut wiedergeben, wenn ich die gleiche Seite erneut scrolle? Es scheint, dass der Sound nur einmal nach dem Start der App ausgelöst wird.

Ich würde sehr jede Hilfe von Ihnen schätzen.

+0

Andere Antworten? Ich brauche Hilfe! – viper15

Antwort

0

Sie sollten die Sound-ID, die von AudioServicesCreateSystemSoundID zurückgegeben wird, zwischenspeichern, und Sie können diese bei Bedarf wiederverwenden.

Beachten Sie auch, dass der viewDidLoad nur aufgerufen wird, wenn die Ansicht geladen ist, nicht angezeigt. Und die Ladezeit kann zu einer anderen Zeit aufgerufen werden, um die Zeit anzuzeigen. (Es ist durchaus möglich, dass die Seite 2 automatisch auf Seite 3 geladen wird und somit erneut ausgelöst wird.)

Schließlich ist es nicht gut, wenn die Seitenanzeige die Aktionen auslöst (wie der Ton). Stattdessen sollten Sie es in die Ebene verschieben, die den Seitenübergang tatsächlich ausführt. Das würde dein Problem lösen.

+0

Ich verstehe. Das macht sehr viel Sinn. Tut mir leid, dass ich so ein Noob bin, nur herumwandernd, wenn du mir zeigen könntest, welchen Code ich verwenden soll, um die Sound-ID zwischenzuspeichern, und wo setzt du dann Sound-Aktionen? Unter AppDelegate.m? und welche Klasse? – viper15