我目前在我的应用程序中播放背景音乐。 在:
-(void)viewDidLoad
我开始播放音乐,使用:
[self LoadMusic];
这基本上启动音乐缓冲它然后如果设置声明'声音开启'音乐开始。
我遇到的问题是当我移动视图时,音乐会继续播放(应该如此),但是当您返回到首次启动音乐的视图控制器时,它会再次激活。
所以你最终会把相同的音乐循环到彼此之上。
我尝试了一些例如:
if(MusicPlay.playing){
// do nothing
}else{
// start music
[self LoadMusic];
}
这是loadMusic的代码
- (void) LoadMusic{
//Notification for stoping
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(stopMusic) name:@"StopMusic" object:nil];
//Notification for playing
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playMusic) name:@"PlayMusic" object:nil];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *SoundSwitch = [defaults stringForKey:@"Sound_EnabledS"];
// grab the path to the caf file
NSString *soundFilePath =
[[NSBundle mainBundle] pathForResource: @"Menu_Loop"
ofType: @"mp3"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
// create a new AVAudioPlayer initialized with the URL to the file
AVAudioPlayer *newPlayer =
[[AVAudioPlayer alloc] initWithContentsOfURL: fileURL
error: nil];
// set our ivar equal to the new player
self.MusicPlay = newPlayer;
// preloads buffers, gets ready to play
[MusicPlay prepareToPlay];
MusicPlay.numberOfLoops = -1; // Loop indefinately
if ([SoundSwitch isEqualToString:@"1"]){
[self.MusicPlay play]; // Plays the sound
}else{
[self.MusicPlay stop]; // Stops the sound
}
}
但这不起作用,因为它没有看到MusicPlay.playing只有在视图被'重新启动'后才会出现
如果有人有办法解决这个问题。 请告诉我。
谢谢。
答案 0 :(得分:2)
我猜这里发生的事情是,当主菜单的视图被卸载时,你没有处理self.MusicPlay
。如果在切换视图时需要继续播放背景音乐,它应该由应用程序控制器(或等效的)处理,而不是由一个特定的视图处理。
答案 1 :(得分:0)
您的代码也可以使用,但请查看以下代码
if([self.MusicPlay isPlaying]){ // playing is property and isPlaying is getter method
// do nothing
}else{
// start music
[self LoadMusic];
}