0

我终于用 ViewDidLoad 循环播放了我的音频,但我真的很难用 ViewDidDissapear 让它停止。我已经阅读了这个这个以及这个论坛上的许多答案和问题。如果我使用 [theAudio stop],我会收到一个错误,并且大多数其他教程都会出现错误。我究竟做错了什么?

我已经导入了 AVFoundation/AVFoundation.h 框架并添加了 AVAudioPlayerDelegate

    - (void)viewDidLoad
{

    NSString *path = [[NSBundle mainBundle] pathForResource:@"safariSFX" ofType:@"mp3"];
    AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]  error:NULL];
    [theAudio play];
    theAudio.numberOfLoops = -1;

    [super viewDidLoad];

}
4

2 回答 2

1

您需要将AVAudioPlayer实例存储为@property。这样,当ViewWillDisappear事件发生时,您可以调用[theAudio stop];在上面的代码中创建一个本地变量,因此以后没有任何方法可以引用它。

于 2013-01-23T19:30:24.000 回答
0

您的代码超出范围。

theAudio如果您希望能够从 viewWIllDisappear 中调用它,则需要创建一个 ivar。

// In viewDidLoad  -- you will need to setup theAudio in viewWillAppear if you are going to come back to this viewcontroller
if(theAudio == nil){
//initialize theAudio if it is nil
theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]  error:NULL];
}
//begin playing
[theAudio play];
.
.
.



-(void)viewWillDisappear{
    //cleaning up if theAudio isn't nil, stop playing and set to nil;
    if(theAudio != nil){
       [theAudio stop];
       theAudio = nil;
    }
}
于 2013-01-23T19:31:33.863 回答