我有几个视图,其中一个是“选项”视图,在此视图中将有一个按钮,允许用户单击按钮“停止”背景音乐,或单击它以将其关闭上。我很确定我对如何做到这一点有一般的想法,问题是,我的代码不工作,我不知道为什么。
这是“options”类的实现文件中的代码:
- (IBAction)musicIO:(id)sender {
MenuViewController *myMusicPlayer = [[MenuViewController alloc] init];
[myMusicPlayer backgroundMusicStart];
}
它调用我的菜单代码中的方法(另一个类)
这是我的菜单代码:
-(IBAction) backgroundMusicStart{
if( i != 1){
NSURL * URL = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/backgroundMusic.wav", [[NSBundle mainBundle] resourcePath]]];
NSError *error;
backgroundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:URL error:&error];
backgroundPlayer.numberOfLoops = -1;
[backgroundPlayer play];
i = 1;
NSLog(@"In start music");
}
else if ( i == 1 ) {
[backgroundPlayer stop];
i = 0;
NSLog(@"In stop music");
}
}
“i”是全局声明的变量。
代码问题: 它运行,NSLog输出它进入两个if语句正常,问题是它在[backgroundPlayer停止]括号,它不会停止音乐,我无法弄清楚为什么。
答案 0 :(得分:3)
每次调用此方法时,您都会初始化backgroundPlayer,并且仅在其中一种情况下。您应该做的是使backgroundPlayer成为一个实例变量并对其共享实例进行操作......示例如下:
// static AVPlayer *backgroundPlayer;
- (IBAction) backgroundMusicStart {
if (backgroundPlayer == nil) {
backgroundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:URL error:&error];
backgroundPlayer.numberOfLoops = -1;
}
if (i == 1) { [backgroundPlayer stop]; }
else if (i == 0) { backgroundPlayer play]; }
}