繁体   English   中英

带有AVAudioPlayer的UISwitch

[英]UISwitch with AVAudioPlayer

播放部分有问题。当我关闭电源时-声音检查器将其值更改为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;
    }
}

它不会停止,因为每次调用playsound时,您都在创建一个新的AVAudioPlayer 因此,当您调用[audioplayer stop] ,不是在当前正在播放的AVAudioPlayer上调用它,而是在刚创建的新[audioplayer stop]上调用它。

您可以将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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM