Скрыть устройство Громкость HUD при одновременном регулировании громкости с помощью ползунка MPVolumeView

Я реализовал видеоплеер с MPMoviePlayer в своем приложении iPad, использовал MPVolumeView для регулятора громкости. Моя проблема заключается в том, что когда я просматриваю представление тома, чтобы отрегулировать громкость, отображается оверлей громкости громкости устройства, как показано на скриншоте ниже.

enter image description here

Как отключить этот индикатор объема системы? Мой код:

@property (weak, nonatomic) IBOutlet MPVolumeView *playbackMPVolumeView;

//Customizing controller
- (void)customizeVolumeController
{
    _playbackMPVolumeView.showsRouteButton  = YES;
    _playbackMPVolumeView.showsVolumeSlider = YES;
    [_playbackMPVolumeView setVolumeThumbImage:[UIImage imageNamed:@"volume_slider_thumb.png"] forState:UIControlStateNormal];
}

Ответ 1

Вот решение

CGRect frame = CGRectMake(-1000, -1000, 100, 100);
MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:frame];
[volumeView sizeToFit];
[self.view addSubview:volumeView];

Ответ 2

Swift 3

let volumeView = MPVolumeView(frame: .zero)
view.addSubview(volumeView)

Ответ 3

- (void) viewDidLoad 
{
    [super viewDidLoad];
    MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame: CGRectZero];
    [self.view addSubview: volumeView];
    ...
}

взяли это refrence из applicationMusicPlayer тома

Ответ 4

AppDelegate:

self.window?.insertSubview(MPVolumeView(), at: 0)

Ответ 5

Просто добавьте эти строки, где вы делаете экземпляр MPVolumeView видимым. Например: если у вас есть кнопка переключения громкости

-(void)toggle
{
   self.volumeView.hidden = !self.volumeView.hidden;
   [self.volumeView willMoveToSuperview:self.volumeView.superview];
   [self.volumeView didMoveToSuperview];
}

Если у вас есть всегда видимый ползунок тома (экземпляр MPVolumeView).

-(void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    self.volumeView.hidden = NO;
    [self.volumeView willMoveToSuperview:self.volumeView.superview];
    [self.volumeView didMoveToSuperview];

}

Ответ 6

Ниже код работает для меня, кроме добавления MPVolumeView в качестве подзадачи.

AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionSetActive(YES);

Ответ 7

Вот приведенное выше решение в Swift. Работает с Swift 2-3.

let frame = CGRect(x: -1000, y: -1000, width: 100, height: 100)
let volumeView = MPVolumeView(frame: frame)
volumeView.sizeToFit()
self.view!.addSubview(volumeView)

Ответ 8

Это работает для меня.

MPVolumeView *volumeView2 = [[MPVolumeView alloc] initWithFrame:CGRectMake(-28, -2, 24, 24)];
[self.view addSubview:volumeView2];
volumeView2.showsVolumeSlider = true;
volumeView2.showsRouteButton = false;
_videoPlayer.AllowsAirPlay = false;

Ответ 9

Это то, что на самом деле сработало для меня, по какой-то причине, если CGRect является CGRect.zero, тогда, если есть кнопка в верхнем левом углу, не будет работать..., так что это сработало:

let volumeView = MPVolumeView(frame: CGRect.init(x: self.view.frame.maxX, y: self.view.frame.maxY, width: 0, height: 0))
volumeView.clipsToBounds = true
volumeView.showsRouteButton = false
self.view.addSubview(volumeView)

Ответ 10

Лучшее решение, которое я придумал для Swift 4

import MediaPlayer

Добавьте эти 3 строки кода

    let volumeView = MPVolumeView(frame: .zero)
    volumeView.clipsToBounds = true
    view.addSubview(volumeView)

Ответ 11

Мне пришлось сделать следующее, чтобы отключить оверлей тома:

AppDeletage.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  ...

  // disable volume hud
  CGRect rect = CGRectMake(-500, -500, 0, 0);
  MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:rect];
  [self.window addSubview:volumeView];
  return YES;
}

AppDelegate.h:

@interface AppDelegate : UIResponder <UIApplicationDelegate>

...
@property (nonatomic, strong) MPVolumeView   * volumeView;

@end

Цель только C, без Swift. Работает с iOS 8.1+ (не тестировалось более ранних версий). Добавляя это, поскольку я изо всех сил пытался реализовать это на основе данных ответов без контекста.