在后台运行操作而不释放它

时间:2011-10-07 14:50:26

标签: objective-c cocoa-touch

我有一个IBaction,一旦用户按下IBaction播放声音。用户可以通过按下按钮来打开和关闭声音。按下按钮一次打开声音,再次按下它会关闭声音。 它在一个视图控制器中完美运行。 不过这是我的问题。我有2个视图,一旦用户播放声音并想要转到另一个视图,声音仍然在另一个视图上播放一次,但如果他们想要停止声音,他们将不得不返回到包含声音,但问题是创建一个新的音频会话意味着现有的声音无法关闭。 有谁知道怎么做

以下是代码:

- (IBAction)twoSound:(id)sender; {
    if (ButtonAlReadyClicked == 1) 
    {
        ButtonAlReadyClicked = 2;

        [sender setBackgroundImage:[UIImage imageNamed:@"z2.png"] forState:UIControlStateNormal];

    }
    else if (ButtonAlReadyClicked == 2) 
    {
        ButtonAlReadyClicked = 1;

        [sender setBackgroundImage:[UIImage imageNamed:@"z1.png"] forState:UIControlStateNormal];

    } 
    if (twoAudio && twoAudio.playing) {
        [twoAudio stop];
        [twoAudio release];
        twoAudio = nil;
        return;
    }    
    NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp3"];
    if (twoAudio) [twoAudio release];
    NSError *error = nil;
    twoAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];
    if (error)
        NSLog(@"%@",[error localizedDescription]);
    twoAudio.numberOfLoops = -1;
    twoAudio.delegate = self;
    [twoAudio play];    


}

-(IBAction)goMain:(id)sender; {

      [self dismissModalViewControllerAnimated:YES];
}

1 个答案:

答案 0 :(得分:0)

我会创建一个单独的类来存储和跟踪您的音频。向该类添加单例和方法以切换声音。这样,它只是一个管理整个应用程序可访问的音乐的类实例。