2012-10-12 2 views
0

J'ai une application qui, lorsqu'elle démarre, lit un clip d'introduction. Le code suivant est dans le - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions dans le appDelegate.m qui fonctionne juste splendide.iPhone: le lancement du clip audio ne s'arrête pas lorsque la vue change

NSLog(@"PLAY SOUND CLIP WHILE LOADING APP"); 
NSURL *clip = [[NSBundle mainBundle] URLForResource: @"intro" withExtension:@"caf"]; 
self.startupPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:clip error:NULL]; 
[self.startupPlayer play]; 

Si l'utilisateur change de vue avant la fin du son d'introduction, il continue à jouer. J'ai placé ce code en dehors de - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions pensant que cela aiderait mais non. Je pensais que peut-être si je mets une instruction if juste après la demande de chargement qui pourrait faire l'affaire mais cela n'a pas fonctionné. Voir par exemple:

NSLog(@"PLAY SOUND CLIP WHILE LOADING APP"); 
NSURL *clip = [[NSBundle mainBundle] URLForResource: @"intro" withExtension:@"caf"]; 
self.startupPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:clip error:NULL]; 
[self.startupPlayer play]; 

if ([viewDidDisappear == YES]) { 
[self.startupPlayer stop]; 
} 

Toute suggestion qui arrêteraient le son intro si l'utilisateur change avant que voir clip est fini de jouer serait génial. Oh, et j'ai utilisé le "viewWillDisappear" dans d'autres parties de l'application avec succès, mais dans ce cas, je choisis "viewDidDisappear" parce que le dernier n'a pas fonctionné non plus. Donc je suis perplexe. Merci d'avance.

EDIT: Alors, je me suis déplacé le viewWillDisappear dans mon MainViewController et a appelé le délégué mais je ne suis toujours pas avoir de chance. Encore une fois, de l'aide serait appréciée.

Répondre

0

Je résolu cette question en prenant la déclaration @property pour * startupPlayer et en le plaçant dans le fichier AppDelegate.h au lieu de la façon dont il était inférieur;

Dans le AppDelegate.m

@interface AppDelegate() 

@property (nonatomic, strong) AVAudioPlayer *startupPlayer; 
@end 

Je @synthesized encore dans le fichier .m comme indiqué ci-dessous et gardé les didFinishLaunchingWithOptions même:

@implementation AppDelegate 
@synthesize startupPlayer = _startupPlayer; 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 

//------ PLAY SOUND CLIP WHILE LOADING APP ----- 

NSLog(@"PLAY SOUND CLIP WHILE LOADING APP"); 
NSURL *clip = [[NSBundle mainBundle] URLForResource: @"intro" withExtension:@"caf"]; 
self.startupPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:clip error:NULL]; 
[self.startupPlayer play]; } 

Puis dans mon MainViewController.m

#import "AppDelegate.h" 

-(void)viewWillDisappear:(BOOL)animated 
{ 
[super viewWillDisappear:animated]; 
//stop intro sound 
AppDelegate *introClip = (AppDelegate *)[[UIApplication sharedApplication]delegate]; 
[[introClip startupPlayer]stop];} 

Maintenant, même si la musique d'intro est encore en cours de lecture à travers un cycle, le l'utilisateur peut passer à une autre vue et arrêter cette musique. Comment répétez-vous cela après la lecture de l'audio?

+0

@meltrek –

+0

_startupPlayer.numberOfLoops = -1; // nombre négatif signifie jouer indéfiniment – saintjab

Questions connexes