iOS音量控制界面的顯示與隱藏

目錄

<h4 id="1">需求</h4>
最近在優(yōu)化項目中的播放器界面裸燎,設(shè)計師新出了一套UI,其中有一個音量的控制的 UISlider。要求是访敌,在使用手機上的音量調(diào)節(jié)按鈕以及的時候,顯示音量調(diào)節(jié)的界面(系統(tǒng)自帶),在使用音量調(diào)節(jié)的slider的時候轰枝,則不顯示音量調(diào)節(jié)的界面捅彻,因為本身已經(jīng)有了一個滑動條了,再加一個系統(tǒng)的略顯重復(fù)鞍陨。

<h4 id="2">總結(jié)</h4>

如果不想看下面啰哩啰嗦的代碼和對原理的猜測步淹,直接看結(jié)論在這里。??
  • MPVolumeView添加到項目中的一個View上并顯示在屏幕外后诚撵,改變音量就看不到了.

     [_mpVolumeView setFrame:CGRectMake(-100, -100, 40, 40)];
     [_mpVolumeView setHidden:NO];
     [self.view addSubview:_mpVolumeView];
    
  • 使用下述2句代碼均可實現(xiàn)讓MPVolumeView重新可以顯示出來缭裆,區(qū)別是上面一句會在調(diào)用后顯示音量界面一次,請結(jié)合需求使用寿烟。

    [_mpVolumeView setHidden:YES];
    [_mpVolumeView removeFromSuperview];
    
    

<h4 id="3">實現(xiàn)</h4>

實現(xiàn)上下滑動調(diào)節(jié)音量
  1. 使用UIPanGestrueRecognizer進行滑動手勢的識別幼驶。

    -(void)panGesture:(UIPanGestureRecognizer *)pan {
        CGPoint velocity = [pan velocityInView:pan.view];
        CGFloat ratio = 13000.f;    
        CGFloat nowVolumeValue = _mpVolumeSlider.value;
        float changeValue = (nowVolumeValue - velocity.y /  ratio);
    }
    
  2. 拿到MPVolumeViewMPVolumeSlider

    _mpVolumeView = [[MPVolumeView alloc] init];
    for (UIView *view in [_mpVolumeView subviews]) {
        if ([view.class.description isEqualToString:@"MPVolumeSlider"]) {
            _mpVolumeSlider = (UISlider *)view;
                    break;
           }
      }
            [_mpVolumeView setFrame:CGRectMake(-100, -100, 40, 40)];
            [_mpVolumeView setShowsVolumeSlider:YES];
        }
    
    • MPVolumeView如果不想看到韧衣,將frame設(shè)置屏幕顯示范圍之外盅藻。
    • setShowsVolumeSlider方法要設(shè)置為YES,否則之后的設(shè)置會無效化畅铭。
  3. panGesture方法中將changeValue賦值給_mpVolumeSilder氏淑。

    [_mpVolumeSlider setValue:changeValue animated:YES];
    [_mpVolumeSlider sendActionsForControlEvents:UIControlEventAllEvents];
    
  4. 在做完上述步驟后,已經(jīng)可以拖動調(diào)節(jié)音量了硕噩,并且可以看到系統(tǒng)音量調(diào)節(jié)界面假残。

實現(xiàn)拖動slider調(diào)節(jié)音量
  1. 在界面上放一個UISlider

  2. 添加一個valueChanged的'target'炉擅。

    [_mpVolumeView setHidden:NO];
    [self.view addSubview:_mpVolumeView];
    [_mpVolumeSlider setValue:sender.value animated:NO];
    
    
    • 系統(tǒng)的MPVolumeViewHidden設(shè)置為YES會導(dǎo)致MPVolumeView出現(xiàn)在你的屏幕中央辉懒。
    • 想要隱藏音量設(shè)置界面,將MPVolumeViewhidden設(shè)置為NO谍失,并添加到自己的view上眶俩,這樣會導(dǎo)致系統(tǒng)判斷你已經(jīng)將這個view添加到你的項目中的view上,就不會在系統(tǒng)層面的window上顯示MPVolumeView了快鱼。做出這樣的假設(shè)是因為我在顯示出MPVolumeView的時候看項目層級的時候是看不到MPVolumeView的颠印。
  3. 但是現(xiàn)在有個問題,那就是使用音量調(diào)節(jié)按鈕和滑動調(diào)節(jié)的時候,也不顯示音量界面了抹竹。

    • slider添加UIControlEventTouchUpInsidetarget线罕。在相應(yīng)事件中添加
    [_mpVolumeView removeFromSuperview];
    //將`_mpVolumeView`移除后,使用按鈕和滑動的時候窃判,系統(tǒng)判斷你沒有添加钞楼,然后就在系統(tǒng)`window`的層面上顯示了。
    
    • panGesture中設(shè)置
    [_mpVolumeView setHidden:YES];
    //上述代碼同樣可以達到顯示音量調(diào)節(jié)界面的效果袄琳,在`target`中不用的原因是調(diào)用這句代碼的時候會顯示音量界面一次询件,與我們的需求不太符合燃乍。
    

<h4 id="4">Demo</h4>
Demo地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雳殊,隨后出現(xiàn)的幾起案子橘沥,更是在濱河造成了極大的恐慌,老刑警劉巖夯秃,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件座咆,死亡現(xiàn)場離奇詭異,居然都是意外死亡仓洼,警方通過查閱死者的電腦和手機介陶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來色建,“玉大人哺呜,你說我怎么就攤上這事』粒” “怎么了某残?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長陵吸。 經(jīng)常有香客問我玻墅,道長,這世上最難降的妖魔是什么壮虫? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任澳厢,我火速辦了婚禮,結(jié)果婚禮上囚似,老公的妹妹穿的比我還像新娘剩拢。我一直安慰自己,他們只是感情好饶唤,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布徐伐。 她就那樣靜靜地躺著,像睡著了一般搬素。 火紅的嫁衣襯著肌膚如雪呵晨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天熬尺,我揣著相機與錄音,去河邊找鬼谓罗。 笑死粱哼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的檩咱。 我是一名探鬼主播揭措,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼胯舷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绊含?” 一聲冷哼從身側(cè)響起桑嘶,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎躬充,沒想到半個月后逃顶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡充甚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年以政,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伴找。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡盈蛮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出技矮,到底是詐尸還是另有隱情抖誉,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布衰倦,位于F島的核電站袒炉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏耿币。R本人自食惡果不足惜梳杏,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淹接。 院中可真熱鬧十性,春花似錦、人聲如沸塑悼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厢蒜。三九已至霞势,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斑鸦,已是汗流浹背愕贡。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巷屿,地道東北人固以。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親憨琳。 傳聞我的和親對象是個殘疾皇子诫钓,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件篙螟、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,058評論 4 62
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,734評論 25 707
  • 一張車票可以把你從一個地方帶去另一個你要去(想去)的地方菌湃,這是它存在意義。 以前日子很慢很慢遍略,爺爺那輩人時惧所,如果想...
    守望小確幸閱讀 823評論 0 1
  • 好多童鞋假期過的是真無聊,我在這里給大家推薦一個系列電影墅冷,纯路,,的士速遞共有四部寞忿,優(yōu)酷免費驰唬,標簽是法國無厘頭輕喜劇,...
    旦月白閱讀 209評論 0 0
  • 如期所愿腔彰,如你所愿叫编,如他所愿,如大家所愿霹抛,連個人影都沒看著……咋的啦搓逾??杯拐?心塞……
    葉盡閱讀 126評論 0 0