博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS节拍器开发
阅读量:7086 次
发布时间:2019-06-28

本文共 2306 字,大约阅读时间需要 7 分钟。

&效果图

我将节拍器View部分分成了四部分,负责处理各自操作。

###View HLRhythmSpotView负责展示节拍数,会根据节拍显示闪烁动画 HLChoiceRhythmView负责切换节拍数 HLChangeSpeedView负责切换频率 HLPlaySwitchView负责播放、暂停、切换频率

###节拍管理类 HLMetronomeAudioManager负责管理节拍的播放、暂停、频率

typedef NS_ENUM(NSInteger, HLMetronomeType) {        HLMetronomeType1V4 =0,     // 1/4    HLMetronomeType2V4,        // 2/4    HLMetronomeType3V4,        // 3/4    HLMetronomeType4V4,        // 4/4    HLMetronomeType3V8,        // 3/8    HLMetronomeType6V8         // 6/8};// 代理@protocol HLMetronomeAudioManagerDelegate 
/** 当前播放音频的总次数(用来处理上部圆View那个显示高亮状态) */- (void)hlMetronomeAudioCurrentTotalNo:(int)currentTotalNo;@end@interface HLMetronomeAudioManager : NSObject+ (instancetype)sharedAudioManager;/** 代理 */@property (nonatomic, weak) id
delegate;/** 节拍类型 */@property (nonatomic, assign) HLMetronomeType metronomeStat;/** 播放速率,范围40~240 */@property (nonatomic, assign) int rate;/** 播放 */- (void)play;/** 暂停 */- (void)pause;@end复制代码

每个View通过代理将用户操作事件传回HLMetronomeViewController,由HLMetronomeViewController调用HLMetronomeAudioManager的方法操作节拍音频。

#pragma mark -- 初始化节拍器播放器- (void)initMetronomeAudio{        [HLMetronomeAudioManager sharedAudioManager].delegate = self;    [[HLMetronomeAudioManager sharedAudioManager] setMetronomeStat:HLMetronomeType1V4];    [[HLMetronomeAudioManager sharedAudioManager] setRate:40];    [self.rhythmSpotView updateSpotView:HLMetronomeType1V4];}#pragma mark -- HLChoiceRhythmViewDelegate- (void)hlChangeRhythm:(HLMetronomeType)metronomeStat{        [self.rhythmSpotView updateSpotView:metronomeStat];    [[HLMetronomeAudioManager sharedAudioManager] setMetronomeStat:metronomeStat];}#pragma mark -- HLChangeSpeedViewDelegate- (void)hlChangeSpeed:(int)speed{        [[HLMetronomeAudioManager sharedAudioManager] setRate:speed];}#pragma mark -- HLPlaySwitchViewDelegate- (void)hlPlay{        [[HLMetronomeAudioManager sharedAudioManager] play];}- (void)hlPause{        [[HLMetronomeAudioManager sharedAudioManager] pause];}- (void)hlChangeSpeedWithIsAdd:(BOOL)isAdd speed:(int)speed{        [self.changeSpeedView changeSpeedWithIsAdd:isAdd speed:speed];}#pragma mark -- HLMetronomeAudioManagerDelegate- (void)hlMetronomeAudioCurrentTotalNo:(int)currentTotalNo{        [self.rhythmSpotView updateSpotViewHeightState:currentTotalNo];}复制代码

具体代码可以下载查看

转载地址:http://cwwql.baihongyu.com/

你可能感兴趣的文章
去除sql的前后半角全角空格
查看>>
iview表单密码自定义验证
查看>>
[SinGuLaRiTy] 组合数学题目复习
查看>>
Android中SQLite使用
查看>>
NAND结构与驱动
查看>>
图片在容器里水平垂直居中
查看>>
015PHP文件处理——文件处理flock 文件锁定 pathinfo realpath tmpfile tempname
查看>>
mysql主主复制(双主复制)配置步骤
查看>>
MySQL-----备份(转储)
查看>>
关系型数据库之MySQL
查看>>
C# TimeClass
查看>>
PHP将XML数据转换为数组
查看>>
算法笔记-二叉树
查看>>
JavaSE-方法的参数传递
查看>>
编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,并输出计算结果总是100的所有可能性。...
查看>>
浅析TreeView控件的操作(下)
查看>>
学习日记0827异常处理 元类 自定义元类 自定义元类来实例化类 属性查找顺序...
查看>>
ThinkJava-持有对象
查看>>
proxool代码创建数据库连接与获取监控状态
查看>>
单例模式
查看>>