iPhone SDK - Как отключить просмотр индикатора громкости при нажатии аппаратных кнопок? - PullRequest
5 голосов
/ 02 октября 2010

Есть ли способ запретить отображение формы индикатора громкости при нажатии аппаратных кнопок увеличения / уменьшения громкости?

Требуется только для демонстрационного приложения. Таким образом, метод не должен быть безопасным в App Store.

Ответы [ 3 ]

4 голосов
/ 02 октября 2010

Работает так:

  • воспроизвести файл без звука
  • добавление тома Вид на основной вид
  • отправить вид назад

1011 * например *

 NSString *url = [[NSBundle mainBundle]
                       pathForResource:@"silent" ofType:@"mp3"];
 MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc]
                       initWithContentURL:[NSURL URLWithString:url]];
 [moviePlayer play];

 MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:
                       CGRectMake(0, 0, 1, 1)] autorelease];
 [self.view addSubview:volumeView]; 
 [self.view sendSubviewToBack:volumeView];
2 голосов
/ 02 октября 2010

IIRC, наличие MPVolumeView препятствует отображению наложения индикатора громкости. Попробуйте прикрепить соответствующий вид и посмотреть, так ли это.

Затем вы можете попробовать различные приемы, чтобы сделать его невидимым:

  • Сделайте это скрытым (или сделайте суперпредставление скрытым).
  • Установите его альфа (или альфа суперпредставления) на 0, или 0,01, или около того.
  • Переместить его за пределы экрана
  • Переместить его почти за экран (например, чтобы на экране был только верхний левый пиксель)
  • Вставьте его под другим видом.
  • Вставьте его в подпредставление с clipsToBounds = ON и переместите его за эти границы
  • Установите volumeView.layer.mask для нового (таким образом, полностью прозрачного) CALayer. Установить volumeView.userInteractionEnabled = NO.

Все они теоретически обнаруживаются MPVolumeView, но я подозреваю, что некоторые из них будут работать.

1 голос
/ 12 февраля 2013
- (void)viewDidLoad
 {
  [super viewDidLoad];

  //get current volume level
  oldVolume= [[MPMusicPlayerController applicationMusicPlayer] volume];

  //hide volume indicator         
  MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:
                             CGRectMake(0, 0, 1, 1)] autorelease];

  musicController=[MPMusicPlayerController applicationMusicPlayer];
  [self.view addSubview:volumeView];
  [self.view sendSubviewToBack:volumeView];
  [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(volume) userInfo:nil repeats:YES];
}

- (void)volume
{
  if ([musicController volume]>oldVolume || [musicController volume]<oldVolume) {
    [musicController setVolume:oldVolume];
    // do some stuff here and the volume level never changes, just like volume action in camera app
   }
}
...