停止来自另一个班级的声音

时间:2011-06-10 14:30:06

标签: iphone ios multithreading audio

我在classA中播放了一个声音,有没有人知道如何在classB中停止它?

我已经阅读了几篇帖子,其中大多数只是提到了创建一个实例(例如.h中的A * a类,a。[[A类alloc] init)。)由于某些原因,这不会起作用。

以下是一些代码: 在classA.m

path1 = [[NSBundle mainBundle]  pathForResource:[@"songName" ofType:@"mp3"];

av1 = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: path1] error:NULL];
[av1 play];

在classB.m中,

a = [[classA alloc] initWithNibName:nil bundle:nil];

 [a.av1 stop];

2 个答案:

答案 0 :(得分:0)

你知道如何在A级停止声音吗?

做同样的事情,但在B级。

答案 1 :(得分:-1)

你在这做什么,

a = [[classA alloc] initWithNibName:nil bundle:nil];
[a.av1 stop]; 

错了。你正在创建一个全新的对象,很可能是没有播放任何音乐并向其播放器发送stop消息。如果要在其他类中停止播放器,则必须存储另一个类的assign ed引用。如果您希望保持独立,可以查看通知。 This是Apple的权威指南。基本上,这将涉及将A注册为通知的观察者,然后当B准备好播放时,它将发布它即将播放音乐的通知。当A收到该通知时,应关闭其音乐。

所以在init的{​​{1}}中,将自己注册为观察者,

A

然后当B对象准备播放音乐时,发布通知,

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(turnOffMusic:) 
                                             name:@"BWillPlayMusicNotification"
                                           object:nil];

这将导致A [[NSNotificationCenter defaultCenter] postNotification:@"BWillPlayMusicNotification"]; 被调用,这几乎可以做到,

turnOffMusic

请记住在取消分配对象时停止收听通知

- (void)turnOffMusic:(NSNotification *)notification {
    [self.av1 stop];
}

这种方法允许你保持两个类的独立性。