我在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];
答案 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];
}
这种方法允许你保持两个类的独立性。