Остановка звука из другого класса - PullRequest
0 голосов
/ 10 июня 2011

Я играл звук в классе A, и кто-нибудь знает, как остановить его в классе B?

Я уже прочитал несколько постов, большинство из них просто упоминают о создании экземпляра (например, такие как Class A * a в .h и a = [[Class A alloc] init] в .m).Это не будет работать по некоторым причинам.

Вот несколько кодов: В 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 голосов
/ 11 июня 2011

Что вы здесь делаете,

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"];

Это приведет к тому, что будет вызываться turnOffMusic А, что в значительной степени сделает,

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

Не забудьте прекратить прослушивание уведомлений, когда объект освобожден,

[[NSNotificationCenter defaultCenter] removeObserver:self];

Этот подход позволяет вам сохранять оба класса независимыми.

0 голосов
/ 10 июня 2011

Знаете, как остановить звук в классе А?

Просто сделайте то же самое, но в классе B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...