iOS實現音訊進度條效果
這篇文章主要介紹了iOS實現音訊進度條效果,本文寫了一個小demo通過例項程式碼相結合的形式給大家詳細介紹,需要的朋友可以參考下
話不多說先上效果圖
看到這個效果的時候我感覺相對比較難的點有兩點:
一、是這個進度條的進度顏色變化,這裡思路還是比較清晰的,直接用layer的mask來做就可以。
二、第二點就是這個各各條條的高度不一致又沒有規律可言,在各個方法中我最終選擇用隨機數來做。
好了思路清晰了,那就開始擼程式碼了。
首先建立一個View CYXAudioProgressView
@interface CYXAudioProgressView : UIView
//無動畫設定 進度
@property (assign, nonatomic) CGFloat persentage;
//有動畫設定 進度 0~1
-(void)setAnimationPersentage:(CGFloat)persentage;
/**
初始化layer 在完成frame賦值後呼叫一下
*/
-(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賦值後呼叫一下
*/
-(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;
}
設定mask來顯示黃色路徑
/*設定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;
}
手動設定百分比的兩個方法
-(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"];
}
/**
* 在修改百分比的時候,修改遮罩的大小
*
* @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];
}
總結
以上所述是小編給大家介紹的iOS實現音訊進度條效果,希望對大家有所幫助,同時歡迎大家進入小編交流群:624212887,一起交流學習,謝謝大家的支援
相關文章
- 實現環形進度條效果【一】
- CSS3實現原型進度條效果CSSS3原型
- jQuery實進度條效果詳解jQuery
- vue中頁面載入進度條效果的實現Vue
- canvas環形進度條效果Canvas
- golang 進度條功能實現Golang
- Excel實現完成進度的進度條結果Excel
- 現代 CSS 高階技巧,完美的波浪進度條效果!CSS
- JavaScript 動態進度條效果詳解JavaScript
- CSS3圓形進度條效果CSSS3
- CSS3進度條效果程式碼CSSS3
- React 實現 instagram 風格進度條React
- JavaScript 原生實現進度條元件.mdJavaScript元件
- Qml 實現水波進度動畫條動畫
- 【UWP】實現一個波浪進度條
- JS進度條順滑版實現JS
- ios自定義圓環進度條iOS
- 【新特性速遞】進度條,進度條,進度條
- jQuery環形旋轉載入進度條效果jQuery
- 簡單實現帶節點的進度條
- WPF中實現彈出進度條視窗
- 不可思議的純 CSS 滾動進度條效果CSS
- OSS實現檔案下載進度條顯示
- pyqt5的下載進度條 實現模板QT
- python-利用ffmpeg快速提取影片的音訊檔案進階版(可以看到進度條)Python音訊
- 直播系統開發,實現在進度條中顯示文字顯示進度
- 手把手教你實現一個 Vue 進度條元件!Vue元件
- 實現一個協程帶進度條下載器
- Qt實現炫酷啟動圖-動態進度條QT
- vue 高德地圖實現進度條軌跡回放Vue地圖
- 手把手使用 SVG + CSS 實現漸變進度環效果SVGCSS
- vue 自定義指令實現,滾動條百分比進度條。Vue
- iOS 抽獎輪盤效果實現思路iOS
- 如何實現圖片預載入和載入進度條
- 潤乾報表中進度條的一種實現方式
- Qt 進度條QT
- iOS音訊-AVAudioSessioniOS音訊Session
- 短視訊商城系統,Android進度條,自定義進度條,顯示百分比Android