使用MPVolumeView滑块调整音量时隐藏设备音量HUD视图

时间:2014-06-27 05:12:34

标签: ios objective-c mpvolumeview

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

enter image description here

如何禁用此系统音量指示器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];
}

14 个答案:

答案 0 :(得分:8)

Swift 3

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

答案 1 :(得分:6)

这是一个解决方案

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

答案 2 :(得分:4)

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

从这里引用 applicationMusicPlayer volume notification

答案 3 :(得分:4)

如果要在所有应用程序屏幕上隐藏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)
    }
}

万一您需要显示Volume HUD,只需将其从app.window中删除即可。 享受:-)

答案 4 :(得分:3)

的AppDelegate:

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

答案 5 :(得分:2)

我提出的 Swift 4

的最佳解决方案
import MediaPlayer

添加这3行代码

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

答案 6 :(得分: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];

}

答案 7 :(得分:0)

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

/users/sign_out

答案 8 :(得分: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)

答案 9 :(得分:0)

这对我有用。

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

答案 10 :(得分:0)

这实际上对我有用,出于某种原因,如果CGRect是CGRect.zero,那么如果左上角有一个按钮将无法工作......,那么这个工作了:

}}

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

答案 12 :(得分: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)

答案 13 :(得分:0)

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

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

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

self.view.insertSubview(MPVolumeView(), at: 0)