iOS 仿微信发送语音消息按钮 - 手势按钮(一)
最近在做基于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 仿微信发送语音消息按钮 - 手势按钮(一)相关推荐
- android仿微信语音聊天功能,Android仿微信发送语音消息的功能及示例代码
微信的发送语音是有一个向上取消的,我们使用ontouchlistener来监听手势,然后做出相应的操作就行了. 直接上代码: //语音操作对象 private mediaplayer mplayer ...
- Android仿微信发送语音消息动态提示,支持上滑取消发送
Android仿微信发送语音消息动态提示,支持上滑取消发送 先来几张图说明一下,简单直接: 是不是看了图片就秒懂 了. 下面来分析代码实现,直接撸代码. 主页面 AudioSendActivity.j ...
- Flutter仿微信发送语音动画
先看效果 完整代码请访问 ------------------------------完整代码请访问GitHub------------------------ 如有帮助到你请给个star吧 你的支持 ...
- android 仿微信聊天界面 以及语音录制功能,Android仿微信录制语音功能
本文实例为大家分享了Android仿微信录制语音的具体代码,供大家参考,具体内容如下 前言 我把录音分成了两部分 1.UI界面,弹窗读秒 2.一个类(包含开始.停止.创建文件名功能) 第一部分 由于6 ...
- 微信公众号开发笔记(九)发送语音消息
上一篇我们用代码实现发送图片消息,接下来我们来实现发送语音消息功能 发送语音消息 代码实现 1.在Message.util工具类中新增 buildVoiceMessag方法 /** * 构造语音消息 ...
- 短视频平台源码,iOS 仿微信语音输入动画
短视频平台源码,iOS 仿微信语音输入动画实现的相关代码 // // PBSpeechRecognizer.h // ParkBest // // Created by summerxx27 on 2 ...
- 极客日报:砍价永远差一刀?拼多多法庭上回复:小数点后有6位;微信加入语音消息暂停功能;谷歌和IBM提议建立关键开源项目清单
一分钟速览新闻点! 砍价永远差一刀?拼多多法庭上回复:小数点后有6位 微信加入语音消息暂停功能,网友:还需要进度条 原极狐汽车"争议总裁"于立国转投小米汽车担任副总 丁磊回应&qu ...
- 微信朋友圈点赞如何设计测试用例,微信发语音消息,购物车,支付页面如何设计软件测试用例?
做过软件测试或者面试过的人应该了解这个问题你肯定被问过,属于面试必问? 就算没遇到,预测你以后面试肯定会遇到,希望你能想到想到我分享的思路. 那么如何轻松优雅的回答这个题目,我给大家分享一个万能公式, ...
- IOS仿微信朋友圈的日期处理
IOS仿微信朋友圈的日期处理 经常刷微信朋友圈的朋友,都能看到该条信息是什么发送的,有刚刚,有昨天,有xxxx年xx月xx日发送的,今天我们就探究微信内部是怎么样去做的. 对于传入的时间,一般是从服务 ...
最新文章
- Jupyter Notebook修改默认工作路径
- atoi函数_每日一道 LeetCode (50):字符串转换整数 (atoi)
- 这半年来的飞秋官网磕磕碰碰
- DropDownList的项按字母顺序排列
- linux定时删除文件,Linux下定时删除文件
- java8新特性和汪文君Google Guava实战
- 手机怎么打开html页面,手机网页打不开怎么办?看了就知道了!
- 将win10的屏幕颜色调成护眼色豆沙绿
- andriod studio 开发
- android游戏地图编辑器
- 《周易》经典语录,感悟人生智慧(二)
- Docker学习笔记之常用命令
- 你喜欢最华为手机哪一点?网友评论亮了
- 网络安全入门到精通(总结篇) 最终篇(上)
- 简单读!Mybatis源码(一)一条select的一生
- springboot学习网址汇总
- 浅析BMS上电源芯片SBC应用
- 前端JS常用工具方法 , 收藏
- Landsat7 产品详情介绍及文件命名规则
- 欧洲杯案例(数据过滤和排序)
热门文章
- 关于线索二叉树的详解
- 《留住那份你想留住的》#毕业季 | 致敬我们一生仅此一次的青春旅行!!#
- 绿盟赛—鲲鹏软件迁移实践
- 最新、最全和最广泛的人类心脏细胞图谱
- Graphite.v8.SP1.R4.Build.848 1CD (2D的CAD制图工具)
- 2023免费电脑c盘磁盘数据恢复软件EasyRecovery
- 计算机视觉怎么知道你在发小黄图...
- 熊猫烧香病毒文化(图:熊猫烧香QQ表情,网友PS图片)
- 暗黑破坏神快速RR详解
- vcs oracle 双机,赛门铁克VCS(Veritas Cluster Server)双机日常管理,vcsveritas