Swift&Objective-C

IOS音量按钮操作踩坑之旅

2017-08-11  本文已影响111人  水中沚_b078

最近一段时间在研究IOS开发需要用到音量按钮控制一些操作, 在网上找了一个开源的库 RBVolumeButtons , 一开始的时候用的好好的,昨天打开项目运行应用的时候,界面的左上角位置出现了AirPlay图标,找了老半天,终于让我找到了是RBVolumeButtons这个库的原因一旦添加了音量按钮操作控制,就会出现,因此对源码进行了一下研究.看到了如下这样一段代码

-(id)init
{
   self = [super init];
   if( self )
   {
      self.isStealingVolumeButtons = NO;
      self.suspended = NO;

      CGRect frame = CGRectMake(0, -10, 1, 1);
      self.volumeView = [[MPVolumeView alloc] initWithFrame:frame];
   }
   return self;
}

在这里讲MPVolumeView添加到了界面中,但是他的布局是 (0,-10,1,1)还不足以将其隐藏起来,因此将y左边调整到更大的一个值比如30,果然不见了.但是这种解决方案还是不够完美.因此找到了更好的解决方法 .
self.volumeView = [[MPVolumeView alloc] initWithFrame:frame];后调用如下代码

// 设置这句的原因是隐藏AirPlay按钮
[((MPVolumeView*)(self.volumeView)) setShowsVolumeSlider:NO];

接下来继续玩代码,之前音量控制的时候有时候会出现系统音量调节界面.实验了一下分为两种情况

  1. 设备后台有背景音乐正在播放,系统音量提示会隐藏掉
  2. 设备后台没有背景音乐播放,系统音量提示会自动呈现出来

下面是解决方法,在每次按键事件中调用下面这段代码,就不会再显示系统音量提示页面了.

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *error = nil;
if (audioSession.otherAudioPlaying) {
    [audioSession setActive:NO error:&error];
} else {
    [audioSession setActive:YES error:&error];
}
上一篇 下一篇

猜你喜欢

热点阅读