最近在做基于XMPP的IM,开发到发送语音消息的功能.在某度上搜了很久也没有找到适合的方法.索性自己琢磨了一个,提供给大家参考.(其中找到的很多文章都是一个复制另一个的,很烦!没格式没头没尾的.给不了人任何思路的一堆文字)

##发送语音功能模块主要有三个模块

  • 手势按钮
  • 语音录音机(压缩音频数据用于上传发送)
  • 语音播放器(播放接收的压缩语音消息)

#Part 1 :手势按钮
仿照经常使用的微信"发送消息"按钮.当时第一想法就是想到- (BOOL)containsPoint:(CGPoint)p;方法.

直接上代码

.h

#import <UIKit/UIKit.h>@protocol DPChatToolBarAudioDelegate <NSObject>/** 录音完成** @param audioData amr文件data* @prram body      附带信息,比如录音时长等信息*/
- (void)DPAudioRecordingFinishWithData:(NSData *)audioData withBodyString:(NSString *)body;@optional/** 开始录音** @param isRecording 是否开始**/
- (void)DPAudioStartRecording:(BOOL)isRecording;/** 录音失败*/
- (void)DPAudioRecordingFail:(NSString *)reason;/** 音频值测量** @param power 音频值*/
- (void)DPAudioSpeakPower:(float)power;@end@interface ChatToolBarAudioButton : UIButton@property (nonatomic, assign) id <DPChatToolBarAudioDelegate> delegate;@end
复制代码

.m

#import "ChatToolBarAudioButton.h"@interface ChatToolBarAudioButton () <DPAudioRecorderDelegate>
{BOOL isShouldSendAudioMessage;         //用户是否取消发送消息NSUInteger __block audioTimeLength; //录音时长
}@end@implementation ChatToolBarAudioButton- (instancetype)initWithFrame:(CGRect)frame
{if (self = [super initWithFrame:frame]) {self.layer.cornerRadius = 4;self.clipsToBounds = YES;[self.titleLabel setTextAlignment:NSTextAlignmentCenter];[self setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];[self setTitle:@"按住 说话" forState:UIControlStateNormal];[self setTitle:@"松开 结束" forState:UIControlStateHighlighted];[self setBackgroundImage:[UIImage imageNamed:@"chatBar_recordBg"] forState:UIControlStateNormal];[self setBackgroundImage:[UIImage imageNamed:@"chatBar_recordSelectedBg"] forState:UIControlStateHighlighted];//增加长按手势UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress:)];longPress.minimumPressDuration = 0;[self addGestureRecognizer:longPress];}return self;
}- (void)longPress:(UILongPressGestureRecognizer *)gestureRecognizer
{CGPoint point = [gestureRecognizer locationInView:self];if(gestureRecognizer.state == UIGestureRecognizerStateBegan) {[self setTitle:@"松开 结束" forState:UIControlStateNormal];[self setBackgroundImage:[UIImage imageNamed:@"chatBar_recordSelectedBg"] forState:UIControlStateNormal];[self audioStart];} else if(gestureRecognizer.state == UIGestureRecognizerStateEnded) {[self setTitle:@"按住 说话" forState:UIControlStateNormal];[self setBackgroundImage:[UIImage imageNamed:@"chatBar_recordBg"] forState:UIControlStateNormal];[self audioStop];} else if(gestureRecognizer.state == UIGestureRecognizerStateChanged) {if ([self.layer containsPoint:point]) {[self setTitle:@"松开 结束" forState:UIControlStateNormal];isCancelSendAudioMessage = NO;} else {[self setTitle:@"松开 取消" forState:UIControlStateNormal];isCancelSendAudioMessage = YES;}} else if (gestureRecognizer.state == UIGestureRecognizerStateFailed) {NSLog(@"失败");} else if (gestureRecognizer.state == UIGestureRecognizerStateCancelled) {NSLog(@"取消");}
}- (void)audioStart
{//开始录音[[DPAudioRecorder sharedInstance] startRecording];
}//结束录音
- (void)audioStop
{[[DPAudioRecorder sharedInstance] stopRecording];
}//录音失败
- (void)audioFailed
{//do something
}
@end
复制代码

效果图:

Demo 地址 :github.com/XL-Andrew/C…

转载于:https://juejin.im/post/5a3220855188257dd57619b3

iOS 仿微信发送语音消息按钮 - 手势按钮(一)相关推荐

  1. android仿微信语音聊天功能,Android仿微信发送语音消息的功能及示例代码

    微信的发送语音是有一个向上取消的,我们使用ontouchlistener来监听手势,然后做出相应的操作就行了. 直接上代码: //语音操作对象 private mediaplayer mplayer ...

  2. Android仿微信发送语音消息动态提示,支持上滑取消发送

    Android仿微信发送语音消息动态提示,支持上滑取消发送 先来几张图说明一下,简单直接: 是不是看了图片就秒懂 了. 下面来分析代码实现,直接撸代码. 主页面 AudioSendActivity.j ...

  3. Flutter仿微信发送语音动画

    先看效果 完整代码请访问 ------------------------------完整代码请访问GitHub------------------------ 如有帮助到你请给个star吧 你的支持 ...

  4. android 仿微信聊天界面 以及语音录制功能,Android仿微信录制语音功能

    本文实例为大家分享了Android仿微信录制语音的具体代码,供大家参考,具体内容如下 前言 我把录音分成了两部分 1.UI界面,弹窗读秒 2.一个类(包含开始.停止.创建文件名功能) 第一部分 由于6 ...

  5. 微信公众号开发笔记(九)发送语音消息

    上一篇我们用代码实现发送图片消息,接下来我们来实现发送语音消息功能 发送语音消息 代码实现 1.在Message.util工具类中新增 buildVoiceMessag方法 /** * 构造语音消息 ...

  6. 短视频平台源码,iOS 仿微信语音输入动画

    短视频平台源码,iOS 仿微信语音输入动画实现的相关代码 // // PBSpeechRecognizer.h // ParkBest // // Created by summerxx27 on 2 ...

  7. 极客日报:砍价永远差一刀?拼多多法庭上回复:小数点后有6位;微信加入语音消息暂停功能;​谷歌和IBM提议建立关键开源项目清单

    一分钟速览新闻点! 砍价永远差一刀?拼多多法庭上回复:小数点后有6位 微信加入语音消息暂停功能,网友:还需要进度条 原极狐汽车"争议总裁"于立国转投小米汽车担任副总 丁磊回应&qu ...

  8. 微信朋友圈点赞如何设计测试用例,微信发语音消息,购物车,支付页面如何设计软件测试用例?

    做过软件测试或者面试过的人应该了解这个问题你肯定被问过,属于面试必问? 就算没遇到,预测你以后面试肯定会遇到,希望你能想到想到我分享的思路. 那么如何轻松优雅的回答这个题目,我给大家分享一个万能公式, ...

  9. IOS仿微信朋友圈的日期处理

    IOS仿微信朋友圈的日期处理 经常刷微信朋友圈的朋友,都能看到该条信息是什么发送的,有刚刚,有昨天,有xxxx年xx月xx日发送的,今天我们就探究微信内部是怎么样去做的. 对于传入的时间,一般是从服务 ...

最新文章

  1. Jupyter Notebook修改默认工作路径
  2. atoi函数_每日一道 LeetCode (50):字符串转换整数 (atoi)
  3. 这半年来的飞秋官网磕磕碰碰
  4. DropDownList的项按字母顺序排列
  5. linux定时删除文件,Linux下定时删除文件
  6. java8新特性和汪文君Google Guava实战
  7. 手机怎么打开html页面,手机网页打不开怎么办?看了就知道了!
  8. 将win10的屏幕颜色调成护眼色豆沙绿
  9. andriod studio 开发
  10. android游戏地图编辑器
  11. 《周易》经典语录,感悟人生智慧(二)
  12. Docker学习笔记之常用命令
  13. 你喜欢最华为手机哪一点?网友评论亮了
  14. 网络安全入门到精通(总结篇) 最终篇(上)
  15. 简单读!Mybatis源码(一)一条select的一生
  16. springboot学习网址汇总
  17. 浅析BMS上电源芯片SBC应用
  18. 前端JS常用工具方法 , 收藏
  19. Landsat7 产品详情介绍及文件命名规则
  20. 欧洲杯案例(数据过滤和排序)

热门文章

  1. 关于线索二叉树的详解
  2. 《留住那份你想留住的》#毕业季 | 致敬我们一生仅此一次的青春旅行!!#
  3. 绿盟赛—鲲鹏软件迁移实践
  4. 最新、最全和最广泛的人类心脏细胞图谱
  5. Graphite.v8.SP1.R4.Build.848 1CD (2D的CAD制图工具)
  6. 2023免费电脑c盘磁盘数据恢复软件EasyRecovery
  7. 计算机视觉怎么知道你在发小黄图...
  8. 熊猫烧香病毒文化(图:熊猫烧香QQ表情,网友PS图片)
  9. 暗黑破坏神快速RR详解
  10. vcs oracle 双机,赛门铁克VCS(Veritas Cluster Server)双机日常管理,vcsveritas