15

我在 iPad 应用程序中使用 MPMoviePlayer 实现视频播放器,使用 MPVolumeView 进行音量控制。我的问题是,当我滚动音量视图以调整音量时,会显示设备的音量 hud 覆盖,如下面的屏幕截图所示。

在此处输入图像描述

如何禁用此系统音量指示器 hud?我的代码是:

@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];
}
4

14 回答 14

10

斯威夫特 3

let volumeView = MPVolumeView(frame: .zero)
view.addSubview(volumeView)
于 2017-02-14T16:37:30.987 回答
6

这是一个解决方案

CGRect frame = CGRectMake(-1000, -1000, 100, 100);
MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:frame];
[volumeView sizeToFit];
[self.view addSubview:volumeView];
于 2015-12-16T12:57:29.290 回答
6

如果您想在所有应用程序屏幕上隐藏 HUD,请使用以下通用代码:

static let mpVolumeView = MPVolumeView()
static func setupHiddenMPVolume(_ view: UIView){
    if let app = UIApplication.shared.delegate as? AppDelegate, let window = app.window {
        mpVolumeView.alpha = 0.000001
        window.addSubview(mpVolumeView)
    }
}

如果您在某些时候需要显示音量 HUD,只需将其从 app.window 中删除。享受 :-)

于 2018-08-15T15:50:09.573 回答
5
- (void) viewDidLoad 
{
    [super viewDidLoad];
    MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame: CGRectZero];
    [self.view addSubview: volumeView];
    ...
}

applicationMusicPlayer 音量通知中获取此参考

于 2014-12-17T13:23:32.373 回答
4

我为Swift 4提出的最佳解决方案

import MediaPlayer

添加这3行代码

    let volumeView = MPVolumeView(frame: .zero)
    volumeView.clipsToBounds = true
    view.addSubview(volumeView)
于 2017-10-28T09:25:45.513 回答
3

应用委托:

self.window?.insertSubview(MPVolumeView(), at: 0)
于 2017-03-21T20:11:18.793 回答
0

这实际上对我有用,由于某种原因,如果 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)
于 2017-08-23T16:17:07.227 回答
0

这对我有用。

MPVolumeView *volumeView2 = [[MPVolumeView alloc] initWithFrame:CGRectMake(-28, -2, 24, 24)];
[self.view addSubview:volumeView2];
volumeView2.showsVolumeSlider = true;
volumeView2.showsRouteButton = false;
_videoPlayer.AllowsAirPlay = false;
于 2016-12-17T07:02:50.150 回答
0

除了将 MPVolumeView 添加为子视图之外,下面的代码对我有用。

AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionSetActive(YES);
于 2016-06-15T09:10:35.807 回答
0

对于所有只想隐藏 HUD 而不播放任何视频或内容的人,不要忘记添加:

 try! AVAudioSession.sharedInstance().setActive(true, options: [])
 try! AVAudioSession.sharedInstance().setCategory(.ambient, mode: .default, options: [])

然后这些行将起作用:

let frame = CGRect(x: -1000, y: -1000, width: 100, height: 100)
let volumeView = MPVolumeView(frame: frame)
volumeView.sizeToFit()
self.view.addSubview(volumeView)
于 2019-01-06T19:13:37.487 回答
0

只需在使 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];

}
于 2015-12-18T01:06:59.800 回答
0

我必须执行以下操作来禁用音量覆盖:

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+(未测试早期版本)。添加这个是因为我在没有上下文的情况下根据给定的答案努力实现这个。

于 2017-11-20T07:49:30.697 回答
0

这是 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)
于 2016-10-17T00:11:41.413 回答
0

如果您希望在整个应用程序中禁用 MPVolumeSettingsAlert,请将此行添加到 AppDelegate 中的 didFinishLaunchingWithOptions 中:

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

如果您只需要在一个 View Controller 中禁用它,请将此行添加到特定 ViewController 的 viewDidLoad() 中:

self.view.insertSubview(MPVolumeView(), at: 0)
于 2019-02-13T01:20:04.633 回答