绘制播放音乐时的音波图形的View

简介:

绘制播放音乐时的音波图形的View

这个效果类似于这个哦:

效果如下:

源码:

MusicView.h 与 MusicView.m

//
//  MusicView.h
//  Music
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MusicView : UIView

@property (nonatomic, assign) CGFloat  progress;      // 进程百分比,取值为[0,1]
@property (nonatomic, assign) CGFloat  timeInterval;  // 时间间隔

@end


//
//  MusicView.m
//  Music
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "MusicView.h"

@interface MusicView ()

@property (nonatomic, assign) CGRect  baseRect; // 备份原始的frame值

@end

@implementation MusicView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        _baseRect = frame;
    }
    return self;
}

@synthesize progress = _progress;
- (void)setProgress:(CGFloat)progress
{
    if (progress <= 0) {
        _progress = 0;
    } else if (progress >= 1) {
        _progress = 1;
    } else {
        _progress = progress;
    }
    
    [UIView animateWithDuration:(_timeInterval > 0 ? _timeInterval : 0.99) animations:^{
        CGRect rect       = _baseRect;
        rect.size.height *=  _progress;
        self.frame        = rect;
    }];
}
- (CGFloat)progress
{
    return _progress;
}

@end

使用时的情形:
//
//  RootViewController.m
//  Music
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import "MusicView.h"

@interface RootViewController ()

@property (nonatomic, strong) NSTimer    *timer;
@property (nonatomic, strong) MusicView  *musicViewLine1;
@property (nonatomic, strong) MusicView  *musicViewLine2;
@property (nonatomic, strong) MusicView  *musicViewLine3;

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // 线条1
    _musicViewLine1 = [[MusicView alloc] initWithFrame:CGRectMake(100, 100, 4, 20)];
    _musicViewLine1.backgroundColor = [UIColor redColor];
    _musicViewLine1.timeInterval    = 0.5f;
    [self.view addSubview:_musicViewLine1];
    
    // 线条2
    _musicViewLine2 = [[MusicView alloc] initWithFrame:CGRectMake(108, 100, 4, 20)];
    _musicViewLine2.backgroundColor = [UIColor redColor];
    _musicViewLine2.timeInterval    = 0.5f;
    [self.view addSubview:_musicViewLine2];
    
    // 线条3
    _musicViewLine3 = [[MusicView alloc] initWithFrame:CGRectMake(116, 100, 4, 20)];
    _musicViewLine3.backgroundColor = [UIColor redColor];
    _musicViewLine3.timeInterval    = 0.5f;
    [self.view addSubview:_musicViewLine3];
    
    _timer = [NSTimer scheduledTimerWithTimeInterval:0.5f
                                              target:self
                                            selector:@selector(timerEvent)
                                            userInfo:nil
                                             repeats:YES];
}

- (void)timerEvent
{
    _musicViewLine1.progress = arc4random()%100/100.f;
    _musicViewLine2.progress = arc4random()%100/100.f;
    _musicViewLine3.progress = arc4random()%100/100.f;
}

@end

以下是核心代码:

目录
相关文章
|
iOS开发
iOS 动画绘制圆形
iOS 动画绘制圆形
82 1
|
前端开发 Android开发
Android 中使用Canvas绘制文字和矩形,将结果呈现在Bitmap上
Android 中使用Canvas绘制文字和矩形,将结果呈现在Bitmap上
184 0
|
API 图形学
【Win32绘图编程,GDI绘图对象】绘图基础,位图处理,绘图消息处理,画笔,画刷,文本绘制(上)
【Win32绘图编程,GDI绘图对象】绘图基础,位图处理,绘图消息处理,画笔,画刷,文本绘制
|
算法 数据可视化 Windows
【Win32绘图编程,GDI绘图对象】绘图基础,位图处理,绘图消息处理,画笔,画刷,文本绘制(下)
【Win32绘图编程,GDI绘图对象】绘图基础,位图处理,绘图消息处理,画笔,画刷,文本绘制
|
Android开发
Android 裁剪摄像头预览窗口-SurfaceView
Android 裁剪摄像头预览窗口-SurfaceView
749 0
Android 裁剪摄像头预览窗口-SurfaceView
|
图形学 C++ Windows
C++ | GDI+绘制界面
界面除了拖控件贴图,最根本的要学会绘制界面
342 0
|
前端开发 索引
使用canvas绘制渐变色矩形和使用按键控制人物移动
使用canvas绘制渐变色矩形和使用按键控制人物移动 1.使用canvas绘制渐变色矩形 效果演示 image.png 相关代码: Title canvas { border: 1px solid #ccc; } /* .
1425 0
|
Android开发
Android View加载圆形图片且同时绘制圆形图片的外部边缘边线及边框:LayerDrawable实现
 Android View加载圆形图片且同时绘制圆形图片的外部边缘边线及边框:LayerDrawable实现 LayerDrawable实现的结果和附录文章1,2,3中的layer-list一致。
1133 0
Qt之绘制闪烁文本
简述 根据之前的二位绘图,我们可以很轻松的进行文本的绘制,如果需要一些特效,比如:文本闪烁。我们就必须借助其它辅助类来完成。 简述 原理 实现 效果 源码 原理 主要涉及两个辅助类: QFontMetrics 用于获取文本字体的像素高度与宽度 QBasicTimer 定时器,用于更新文本绘制。 原理: 利用QBasicTimer
1563 0