最近一段时间在研究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];
接下来继续玩代码,之前音量控制的时候有时候会出现系统音量调节界面.实验了一下分为两种情况
- 设备后台有背景音乐正在播放,系统音量提示会隐藏掉
- 设备后台没有背景音乐播放,系统音量提示会自动呈现出来
下面是解决方法,在每次按键事件中调用下面这段代码,就不会再显示系统音量提示页面了.
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *error = nil;
if (audioSession.otherAudioPlaying) {
[audioSession setActive:NO error:&error];
} else {
[audioSession setActive:YES error:&error];
}