美文网首页Swift&Objective-C
IOS音量按钮操作踩坑之旅

IOS音量按钮操作踩坑之旅

作者: 水中沚_b078 | 来源:发表于2017-08-11 16:13 被阅读111次

    最近一段时间在研究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];
    }
    

    相关文章

      网友评论

        本文标题:IOS音量按钮操作踩坑之旅

        本文链接:https://www.haomeiwen.com/subject/rlfrrxtx.html