Вам нужно начать аудио сеанс, прежде чем сработает уведомление:
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionSetActive(true);
Теперь вы можете подписаться на уведомление:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(volumeChanged:)
name:@"AVSystemController_SystemVolumeDidChangeNotification"
object:nil];
Чтобы получить объем:
float volume = [[[notification userInfo]
objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"]
floatValue];
Вам нужно будет сохранить громкость и сравнить ее с предыдущим значением, полученным из уведомления, чтобы узнать, какая кнопка была нажата.
Это решение по-прежнему будет регулировать громкость системы, когда пользователь нажимает клавишу громкости, и отображать наложение громкости. Если вы хотите избежать изменения громкости системы и отображения оверлея (по сути, полностью переназначить клавиши регулировки громкости), см. Этот ответ