0

再生サウンド セクションに問題があります。スイッチをオフにすると、サウンドチェッカーが値を NO に変更しますが、オーディオ プレーヤーが停止しません。何が問題なのですか?

-(IBAction)Settings {
    if(settingsview==nil) {
        settingsview=[[UIView alloc] initWithFrame:CGRectMake(10, 130, 300, 80)];
        [settingsview setBackgroundColor:[UIColor clearColor]];

        UILabel *labelforSound = [[UILabel alloc]initWithFrame:CGRectMake(15, 25, 70, 20)];
        [labelforSound setFont:[UIFont systemFontOfSize:18]];
        [labelforSound setBackgroundColor:[UIColor clearColor]];
        [labelforSound setText:@"Sound"];

        SoundSwitch = [[UISwitch alloc]initWithFrame:CGRectMake(10, 50, 20, 20)];
        SoundSwitch.userInteractionEnabled = YES;

        if(soundchecker == YES) [SoundSwitch setOn:YES];
        else [SoundSwitch setOn:NO];
        [SoundSwitch addTarget:self action:@selector(playsound:) forControlEvents:UIControlEventValueChanged];

        [settingsview addSubview:labelforSound];
        [settingsview addSubview:SoundSwitch];
        [self.view addSubview:settingsview];
   }

   else {
        [settingsview removeFromSuperview];
        [settingsview release];
        settingsview=nil;
   }
}

// - - - -音を出す - - - - - - - - - //

-(void)playsound:(id) sender {
    NSString *pathtosong = [[NSBundle mainBundle]pathForResource:@"Teachme" ofType:@"mp3"];
    AVAudioPlayer* audioplayer = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:pathtosong] error:NULL];
    if(SoundSwitch.on) {
        [audioplayer play];
        soundchecker = YES;
    }

    if(!SoundSwitch.on) {
        [audioplayer stop];
        soundchecker = NO;
    }
}
4

1 に答える 1

1

playsound呼び出されるたびに NEW を作成しているため、停止していませんAVAudioPlayer。したがって、 を呼び出すときは、現在再生中の で[audioplayer stop]呼び出すのではなく、作成したばかりの新しい で呼び出すことになります。AVAudioPlayer

AVAudioPlayer 変数をクラスのヘッダーに (必要に応じてプロパティとして) 追加できます。次に、これを行うことができます:

-(void)playsound:(id) sender
{ 
    if(SoundSwitch.on) 
    {
        if(!audioPlayer) {
             NSString *pathtosong = [[NSBundle mainBundle]pathForResource:@"Teachme" ofType:@"mp3"];
             audioplayer = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:pathtosong] error:nil];
        }
        [audioplayer play];
        soundchecker = YES;
    } else {
        if(audioPlayer && audioPlayer.isPlaying) {
             [audioplayer stop];
        }
        soundchecker = NO;
    }
}
于 2012-05-03T19:23:48.673 に答える