Как выставить членов класса или как реализовать метод, действующий на этих членов - PullRequest
0 голосов
/ 11 июля 2011

Я пытаюсь остановить звук из другого класса.Как только приложение открывается, звук начинает воспроизводиться и настраивается на воспроизведение по циклу, если «Пользователь» не изменит настройки и не отключит звук.

Это работает, но только при запуске приложения, гдеон проверяет, установлен ли звук настроек на «ВКЛ / ВЫКЛ», но мне хотелось бы, чтобы он делал это при изменении настроек.

Это то, что у меня пока ...

FirstClass

// grab the path to the caf file
NSString *soundFilePath =
[[NSBundle mainBundle] pathForResource: @"Menu_Loop"
                                ofType: @"mp3"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];
// create a new AVAudioPlayer initialized with the URL to the file
AVAudioPlayer *newPlayer =
[[AVAudioPlayer alloc] initWithContentsOfURL: fileURL
                                       error: nil];
[fileURL release];
// set our ivar equal to the new player
self.player = newPlayer;
[newPlayer release];
// preloads buffers, gets ready to play
[player prepareToPlay];
player.numberOfLoops = -1; // Loop indefinately
if ([SoundSwitch isEqualToString:@"1"]){
[self.player play]; // Plays the sound
}else{
[self.player stop]; // Stops the sound
}

Воспроизведение звука.и если бы я хотел остановить это просто:

[self.player stop]

Но это работает только в одном классе, как бы заставить его работать в другом?

Ответы [ 2 ]

0 голосов
/ 11 июля 2011

Я бы использовал NSNotifications, чтобы вы могли отправлять уведомления об остановке или воспроизведении из любой точки вашего приложения. Вот как вы это делаете:

в вашем методе init для FirstClass сделайте это:

//Notification for stoping
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(stop) name:@"StopSound" object:nil];
//Notification for playing
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(play) name:@"PlaySound" object:nil];

Теперь создайте эти два метода из селекторов (метод stop и play)

-(void)stop{
   [self.player stop]
}

-(void)play{
   [self.player play]
}

в dealloc не забудьте удалить уведомление наблюдателей:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"StopSound" object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"PlaySound" object:nil];

Теперь из любого места в вашем приложении просто отправьте уведомление, чтобы остановить или воспроизвести звук

//Stop
[[NSNotificationCenter defaultCenter] postNotificationName:@"StopSound" object:nil];
//Play
[[NSNotificationCenter defaultCenter] postNotificationName:@"PlaySound" object:nil];
0 голосов
/ 11 июля 2011

Я буду снимать здесь в темноте, так как я не знаю этих яблочных вещей, но я думаю, что вам нужно создать экземпляр AVAudioPlayer, из которого вы хотите манипулировать своим звуком. Если этот класс, который вы представили, доступен во втором месте, которое вы хотите воспроизвести / остановить звук, может быть, вы могли бы выставить своего члена «игрока» для внешнего использования? или что может быть лучше, вы можете добавить к этому классу методы PlaySound (), StopSound () и с их помощью разрешить внешнему коду воспроизводить звуки.

Пример кода с небольшой помощью от Google:)

- (void)playSound:{
    [self.player play];
}

- (void)stopSound:{
    [self.player stop];
}

и теперь вы можете вызывать playSound и stopSound методы вне вашего класса

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