0

いくつかのビューがあります。そのうちの 1 つは「オプション」ビューです。このビューには、ユーザーがボタンをクリックしてバックグラウンド ミュージックを「停止」するか、クリックしてオンに戻すことができるボタンがあります。これを行う方法の一般的なアイデアがあると確信していますが、問題は、私のコードが機能していないことであり、その理由がわかりません。

これは、「オプション」クラスの実装ファイルのコードです。

  - (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] ブラケットにある場合であり、音楽を停止しません。その理由がわかりません。

4

1 に答える 1

3

このメソッドが呼び出されるたびに backgroundPlayer を初期化していますが、そのうちの 1 つだけです。あなたがしなければならないことは、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]; }
}
于 2013-04-24T03:40:38.910 に答える