iOS一個音量大小動態(tài)改變的控件

案例演示

  • 對于實時顯示語音音量大小的需求,發(fā)現(xiàn)很多人的實現(xiàn)方式通過預(yù)放置多張圖進行切換進行完成的。這樣的處理,不但會浪費App的資源存儲空間,而且效率也不高。對于符合某一定規(guī)律動態(tài)改變的圖形,我們也可以考慮通過代碼的方式來實現(xiàn)
圖一.gif

實現(xiàn)機制

圖二.png
  • 外部輪廓View主要控制顯示大小和顯示的圓角效果。內(nèi)部的Layer主要控制動態(tài)顯示的高度,雖然他是矩形的。但是當(dāng)把該Layer加入到View中,而該View設(shè)置了_dynamicView.clipsToBounds = YES;。內(nèi)部的Layer超過外部輪廓的部分,則會被切除掉。
    如此說來,我們只需要動態(tài)改變內(nèi)部Layer顯示的高度,即可完成該效果顯示。是不是很簡單啊。

實現(xiàn)代碼

-(void)refreshUIWithVoicePower : (NSInteger)voicePower{
 CGFloat height = (voicePower)*(CGRectGetHeight(self.frame)/10);
    //每次進來清掉上一次的layer
    [_indicateLayer removeFromSuperlayer];
    _indicateLayer = nil;
    
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, CGRectGetHeight(self.frame)-height, CGRectGetWidth(self.frame), height) cornerRadius:0];
    
    CAShapeLayer *indicateLayer = [CAShapeLayer layer];
    indicateLayer.path = path.CGPath;
    indicateLayer.fillColor = [UIColor grayColor].CGColor;
    [self.layer addSublayer:indicateLayer];
    _indicateLayer = indicateLayer;
}

實現(xiàn)的簡單效果

圖三.gif

請看demo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 CALayer IOS SDK詳解之CALayer(一) http://doc.okbase.net/Hell...
    Kevin_Junbaozi閱讀 5,346評論 3 23
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,689評論 1 32
  • 轉(zhuǎn)載:http://m.itdecent.cn/p/32fcadd12108 每個UIView有一個伙伴稱為l...
    F麥子閱讀 6,595評論 0 13
  • 每個UIView有一個伙伴稱為layer,一個CALayer。UIView實際上并沒有把自己畫到屏幕上;它繪制本身...
    shenzhenboy閱讀 3,265評論 0 17
  • Chapter 3 The truth about ability and accomplishment Mind...
    哇620閱讀 314評論 0 0

友情鏈接更多精彩內(nèi)容