在使用MPVolumeView滑块调整音量时隐藏设备音量HUD视图
我在iPad应用程序中使用MPMoviePlayer实现video播放器,使用MPVolumeView进行音量控制。 我的问题是,当我滚动音量视图来调整音量显示设备的音量叠加层如下面的截图。
我怎样才能禁用这个系统音量指示器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]; }
这是一个解决scheme
CGRect frame = CGRectMake(-1000, -1000, 100, 100); MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame:frame]; [volumeView sizeToFit]; [self.view addSubview:volumeView];
Swift 3
let volumeView = MPVolumeView(frame: .zero) view.addSubview(volumeView)
- (void) viewDidLoad { [super viewDidLoad]; MPVolumeView *volumeView = [[MPVolumeView alloc] initWithFrame: CGRectZero]; [self.view addSubview: volumeView]; ... }
从applicationMusicPlayer卷通知中引用此参考
AppDelegate中:
self.window?.insertSubview(MPVolumeView(), at: 0)
只需将这些行添加到可以使MPVolumeView实例可见的位置即可。 例如:如果你有一个切换音量button
-(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]; }
除了将MPVolumeView作为子视图添加外,下面的代码适用于我。
AudioSessionInitialize(NULL, NULL, NULL, NULL); AudioSessionSetActive(YES);
这对我有用。
MPVolumeView *volumeView2 = [[MPVolumeView alloc] initWithFrame:CGRectMake(-28, -2, 24, 24)]; [self.view addSubview:volumeView2]; volumeView2.showsVolumeSlider = true; volumeView2.showsRouteButton = false; _videoPlayer.AllowsAirPlay = false;
以上是Swift中的上述解决scheme。 适用于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)
这是什么实际上为我工作,由于某种原因,如果CGRect是CGRect.zero,那么如果有一个button在左上angular将无法正常工作…,所以这一个工作:
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)
我想出了Swift 4的最佳解决scheme
import MediaPlayer
添加这3行代码
let volumeView = MPVolumeView(frame: .zero) volumeView.clipsToBounds = true view.addSubview(volumeView)
我必须执行以下操作来禁用卷覆盖:
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
只有Objective C,没有Swift。 适用于iOS 8.1+(未经testing的早期版本)。 添加这个,因为我努力实现这个基于给定的答案没有上下文。