最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS實(shí)現(xiàn)音頻進(jìn)度條效果

 更新時(shí)間:2018年10月16日 08:36:19   作者:yyuuzhu  
這篇文章主要介紹了ios實(shí)現(xiàn)音頻進(jìn)度條效果,本文寫了一個(gè)小demo通過(guò)實(shí)例代碼相結(jié)合的形式給大家詳細(xì)介紹,需要的朋友可以參考下

前幾天開發(fā)群里有一個(gè)老兄問(wèn)了一個(gè)開發(fā)問(wèn)題,他們的需求是要做一個(gè)類似音頻進(jìn)度條的東西,我感覺設(shè)計(jì)還不錯(cuò),于是就寫了個(gè)小demo供大家參考,在爭(zhēng)得了他的同意的情況下寫下這篇文章。

話不多說(shuō)先上效果圖

看到這個(gè)效果的時(shí)候我感覺相對(duì)比較難的點(diǎn)有兩點(diǎn):

一、是這個(gè)進(jìn)度條的進(jìn)度顏色變化,這里思路還是比較清晰的,直接用layer的mask來(lái)做就可以。

二、第二點(diǎn)就是這個(gè)各各條條的高度不一致又沒有規(guī)律可言,在各個(gè)方法中我最終選擇用隨機(jī)數(shù)來(lái)做。

  好了思路清晰了,那就開始擼代碼了。

首先創(chuàng)建一個(gè)View CYXAudioProgressView

@interface CYXAudioProgressView : UIView
//無(wú)動(dòng)畫設(shè)置 進(jìn)度
@property (assign, nonatomic) CGFloat persentage;
//有動(dòng)畫設(shè)置 進(jìn)度 0~1
-(void)setAnimationPersentage:(CGFloat)persentage;
/**
 初始化layer 在完成frame賦值后調(diào)用一下
 */
-(void)initLayers;
@end

成員變量及初始化方法

/*條條間隙*/
#define kDrawMargin 4
#define kDrawLineWidth 8
/*差值*/
#define differenceValue 51
@interface CYXAudioProgressView ()<CAAnimationDelegate>

/*條條 灰色路徑*/
@property (nonatomic,strong) CAShapeLayer *shapeLayer;
/*背景黃色*/
@property (nonatomic,strong) CAShapeLayer *backColorLayer;
@property (nonatomic,strong) CAShapeLayer *maskLayer;
@end
@implementation CYXAudioProgressView

-(instancetype)initWithFrame:(CGRect)frame{
 if (self = [super initWithFrame:frame]) {
 self.backgroundColor = [UIColor blackColor];
 [self.layer addSublayer:self.shapeLayer];
 [self.layer addSublayer:self.backColorLayer];
 self.persentage = 0.0;
 }
 return self;
}

畫圖方法:

/**
 初始化layer 在完成frame賦值后調(diào)用一下
 */
-(void)initLayers{
 [self initStrokeLayer];
 [self setBackColorLayer];
}

繪制路徑

/*路徑*/
-(void)initStrokeLayer{
 UIBezierPath *path = [UIBezierPath bezierPath];
 CGFloat maxWidth = self.frame.size.width;
 CGFloat drawHeight = self.frame.size.height;
 CGFloat x = 0.0;
 while (x+kDrawLineWidth<=maxWidth) {
 CGFloat random =5+ arc4random()%differenceValue;//差值在1-50 之間取
 NSLog(@"%f",random);
 [path moveToPoint:CGPointMake(x-kDrawLineWidth/2, random)];
 [path addLineToPoint:CGPointMake(x-kDrawLineWidth/2, drawHeight-random)];
 x+=kDrawLineWidth;
 x+=kDrawMargin;
 }
 self.shapeLayer.path = path.CGPath;
 self.backColorLayer.path = path.CGPath;
}

設(shè)置mask來(lái)顯示黃色路徑

/*設(shè)置masklayer*/
-(void)setBackColorLayer{
 UIBezierPath *path = [UIBezierPath bezierPath];
 [path moveToPoint:CGPointMake(0, self.frame.size.height/2)];
 [path addLineToPoint:CGPointMake(self.frame.size.width, self.frame.size.height/2)];
 self.maskLayer.frame = self.bounds;
 self.maskLayer.lineWidth = self.frame.size.width;
 self.maskLayer.path= path.CGPath;
 self.backColorLayer.mask = self.maskLayer;
}

手動(dòng)設(shè)置百分比的兩個(gè)方法

-(void)setAnimationPersentage:(CGFloat)persentage{
 CGFloat startPersentage = self.persentage;
 [self setPersentage:persentage];

 CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
 pathAnimation.duration = 1;
 pathAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
 pathAnimation.fromValue = [NSNumber numberWithFloat:startPersentage];
 pathAnimation.toValue = [NSNumber numberWithFloat:persentage];
 pathAnimation.autoreverses = NO;
 pathAnimation.delegate = self;
 [self.maskLayer addAnimation:pathAnimation forKey:@"strokeEndAnimation"];
}
/**
 * 在修改百分比的時(shí)候,修改遮罩的大小
 *
 * @param persentage 百分比
 */
- (void)setPersentage:(CGFloat)persentage {

 _persentage = persentage;
 self.maskLayer.strokeEnd = persentage;
}

最終使用

- (void)viewDidLoad {
 [super viewDidLoad];
 // Do any additional setup after loading the view, typically from a nib.
 self.view.backgroundColor = [UIColor whiteColor];

 self.loopProgressView.frame =CGRectMake(0, 100, self.view.frame.size.width, 150);
 [self.loopProgressView initLayers];
 [self.view addSubview:self.loopProgressView];
 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
 [self.loopProgressView setAnimationPersentage:0.5];
 });

 self.slider.frame = CGRectMake(30, self.view.frame.size.height-60, self.view.frame.size.width-30*2, 20);
 [self.view addSubview:self.slider];
}

以上就簡(jiǎn)單的實(shí)現(xiàn)了上述效果,有問(wèn)題歡迎指教。

Demo: https://github.com/SionChen/CYXAudioProgressView

總結(jié)

以上所述是小編給大家介紹的iOS實(shí)現(xiàn)音頻進(jìn)度條效果,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 詳解iOS Method Swizzling使用陷阱

    詳解iOS Method Swizzling使用陷阱

    這篇文章主要介紹了詳解iOS Method Swizzling使用陷阱,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • iOS緩存文件大小顯示功能和一鍵清理功能的實(shí)現(xiàn)方法

    iOS緩存文件大小顯示功能和一鍵清理功能的實(shí)現(xiàn)方法

    緩存占用了系統(tǒng)的大量空間,如何實(shí)時(shí)動(dòng)態(tài)的顯示緩存的大小,使用戶清晰的了解緩存的積累情況,有效的進(jìn)行一鍵清理呢?下面小編通過(guò)本文給大家介紹iOS緩存文件大小顯示功能和一鍵清理功能的實(shí)現(xiàn)方法,一起看看吧
    2016-10-10
  • iOS中的UITextView文字輸入光標(biāo)使用技巧小結(jié)

    iOS中的UITextView文字輸入光標(biāo)使用技巧小結(jié)

    UITextView在用戶體驗(yàn)方面有著十分明顯的作用,包括鍵盤的呼出及文字的選擇等,接下來(lái)就來(lái)整理給出一份iOS中的UITextView文字輸入光標(biāo)使用技巧小結(jié),需要的朋友可以參考下
    2016-05-05
  • iOS UIView常見屬性方法小結(jié)

    iOS UIView常見屬性方法小結(jié)

    本文通過(guò)實(shí)例代碼給大家詳細(xì)介紹了iOS UIView常見屬性方法,非常不錯(cuò),需要的朋友參考下吧
    2016-12-12
  • iOS開發(fā)實(shí)現(xiàn)UIImageView的分類

    iOS開發(fā)實(shí)現(xiàn)UIImageView的分類

    這篇文章主要為大家詳細(xì)介紹了iOS開發(fā)實(shí)現(xiàn)UIImageView的分類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • iOS判斷用戶是否打開APP通知開關(guān)

    iOS判斷用戶是否打開APP通知開關(guān)

    這篇文章主要為大家詳細(xì)介紹了iOS判斷用戶是否打開APP通知開關(guān)的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • iOS?GCD之dispatch_group_enter和dispatch_group_leave使用

    iOS?GCD之dispatch_group_enter和dispatch_group_leave使用

    這篇文章主要為大家介紹了iOS?GCD之dispatch_group_enter和dispatch_group_leave使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • iOS10最新實(shí)現(xiàn)遠(yuǎn)程通知的開發(fā)教程詳解

    iOS10最新實(shí)現(xiàn)遠(yuǎn)程通知的開發(fā)教程詳解

    這篇文章主要介紹了iOS10最新遠(yuǎn)程通知開發(fā)的實(shí)現(xiàn)過(guò)程,文章先對(duì)推送通知以及遠(yuǎn)程推送通知等進(jìn)行了基本介紹,然后通過(guò)示例代碼詳細(xì)介紹了iOS10 全新遠(yuǎn)程通知的教程,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-09-09
  • iOS中獲取系統(tǒng)相冊(cè)中的圖片實(shí)例

    iOS中獲取系統(tǒng)相冊(cè)中的圖片實(shí)例

    這篇文章主要介紹了iOS中獲取系統(tǒng)相冊(cè)中的圖片實(shí)例,具有一定的參考價(jià)值沒有需要的朋友可以了解一下。
    2016-11-11
  • iOS用UITextField切換明文/密文顯示時(shí)末尾空白的問(wèn)題解決

    iOS用UITextField切換明文/密文顯示時(shí)末尾空白的問(wèn)題解決

    最近在工作中遇到一個(gè)問(wèn)題,利用UITextField切換明文/密文顯示時(shí)發(fā)現(xiàn)字符串后面會(huì)出現(xiàn)一段空白,所以下面這篇文章主要給大家介紹了iOS用UITextField切換明文/密文顯示時(shí)末尾空白問(wèn)題的解決方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-05-05

最新評(píng)論

汉川市| 旬阳县| 沐川县| 海淀区| 鹰潭市| 佛冈县| 嘉黎县| 象州县| 昌都县| 郸城县| 四川省| 姜堰市| 杭州市| 临潭县| 贡觉县| 广德县| 唐山市| 田林县| 自贡市| 怀仁县| 贵阳市| 旌德县| 望谟县| 新巴尔虎右旗| 米易县| 浦东新区| 安新县| 冷水江市| 百色市| 襄樊市| 龙岩市| 新巴尔虎左旗| 马公市| 水富县| 忻城县| 洛浦县| 叙永县| 罗城| 晋宁县| 墨玉县| 呼伦贝尔市|