我在classA中播放过声音,有人知道如何在classB中停止播放吗?
我已经阅读了几篇文章,其中大多数只是提到创建实例(即.h中的Class A * a和.m中的= [[[Class A alloc] init])。由于某些原因,这将无法正常工作。
以下是一些代码:
在类里面
path1 = [[NSBundle mainBundle] pathForResource:[@"songName" ofType:@"mp3"];
av1 = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: path1] error:NULL];
[av1 play];
在classB.m中
一个= [[classA alloc] initWithNibName:nil bundle:nil];
[a.av1 stop];
最佳答案
你在这里做什么
a = [[classA alloc] initWithNibName:nil bundle:nil];
[a.av1 stop];
是错的。您正在创建一个全新的对象,很可能没有播放任何音乐,并向其播放器发送了
stop
消息。如果要停止播放器在另一个类别中,则必须存储另一个类别的assign
ed引用。如果您希望使它们独立,则可以查看通知。 This
是Apple的权威指南。基本上,这将涉及将A注册为通知的观察者,然后当B准备播放时,它将发布将要播放音乐的通知。当A收到该通知时,应关闭其音乐。因此,在
init
的A
中,将自己注册为观察者,[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(turnOffMusic:)
name:@"BWillPlayMusicNotification"
object:nil];
然后当B对象准备播放音乐时,发布通知,
[[NSNotificationCenter defaultCenter] postNotification:@"BWillPlayMusicNotification"];
这将导致A的
turnOffMusic
被调用,这几乎可以做到,- (void)turnOffMusic:(NSNotification *)notification {
[self.av1 stop];
}
请记住,在释放对象时停止监听通知,
[[NSNotificationCenter defaultCenter] removeObserver:self];
这种方法使您可以使两个类保持独立。
关于iphone - 停止其他类(class)的声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6307783/