ios - 让我的背景音乐播放器停止? objective-c

标签 ios objective-c xcode

我有几个 View ,其中一个是“选项” View ,在这个 View 中会有一个按钮,允许用户单击一个按钮来“停止”背景音乐,或者单击它来将其返回在。我很确定我对如何执行此操作有大致的了解,问题是我的代码无法正常工作,我不确定原因。

这是“选项”类的实现文件中的代码:

  - (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 stop] 括号中时,它不会停止音乐,我无法弄清楚为什么。

最佳答案

每次调用此方法时,您都在初始化 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]; }
}

关于ios - 让我的背景音乐播放器停止? objective-c ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16182842/

相关文章:

ios - Facebook登录统一iOS游戏而无需重定向

iphone - UITextfield 清除按钮

iphone - 触摸事件通过透明部分传递给superview

iOS:将图像按钮的值传递给类中函数的好方法

objective-c - 动态给出一个相当于 NSButton 的 Key

ios - 我想将 ~/Library/Developer/Xcode/iOS DeviceSupport 的路径更改为我的外部驱动器

objective-c - 首次启动应用程序时 iCloud 不工作

iphone - cocos2d v2 缩放我的背景

ios - NSBlock 什么时候被释放?

c++ - 如何将 wstring 转换为 NSString