【iOS开发】封装聊天输入框MKInputBar,语音支持iOS & Android平台

  最近做的一个项目,有聊天的功能,最开始从网上找了个被人封装好的输入框,写的很复杂(反正我有点被看迷糊了),用起来呢又有点问题,最终放弃,自己封装了一个聊天输入框MKInputBar,难度不大。语音支持iOS和Android平台,其实就是把caf转换为mp3。底部给出了Demo工程,用起来很简单。



先上几张图吧

  

  

用法很简答,封装好只有两个文件MKInputBar.h & MKInputBar.m,实现三个代理方法:

1 - (void)inputBar:(MKInputBar *)inputBar didSendText:(NSString *)text;
2 - (void)inputBar:(MKInputBar *)inputBar didSendVoice:(NSString *)voicePath; 3 - (void)inputBar:(MKInputBar *)inputBar didTakeImageWithSourceType:(UIImagePickerControllerSourceType)sourceType;

有几点需要说明:

1、在ViewContrller.m中,监听键盘的UIKeyboardWillShowNotification和UIKeyboardWillHideNotification调整inputBar的位置,然后通过KVO监听inputBar的frame来动态调整消息显示msgTableView的frame。

2、Demo中libmp3lame.a链接库不支持arm64指令集,需在Target中Build Settings中的Valid Architectures中将armv64删除。同时,置Build Active Architecture Only(Debug & Release)为NO。

Demo链接在此

Download ZIP

【iOS开发】封装聊天输入框MKInputBar,语音支持iOS & Android平台

时间: 2024-12-05 22:50:13

【iOS开发】封装聊天输入框MKInputBar,语音支持iOS & Android平台的相关文章

IOS开发之记录用户登陆状态,ios开发用户登陆

IOS开发之记录用户登陆状态,ios开发用户登陆 上一篇博客中提到了用CoreData来进行数据的持久化,CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户的登陆状态.例如微信,QQ等,在用户登陆后,关闭应用在打开就直接登陆了.那么我们在App开发中如何记录用户的登陆状态呢?之前在用PHP或者Java写B/S结构的东西的时候,我们用Session来存储用户的登陆信息,Session是存在服务器上仅在一次回话

Android学习路线(十九)支持不同设备——支持不同(Android)平台版本

当最新的Android版本为你的应用提供着很棒的APIs时,你却要在更多的设备更新之前继续支持老的系统版本.这篇课程如何在继续支持低版本的系统的情况下使用新版本的高级API. Platform Versions 仪表板展示了最新的活跃设备上运行的Android系统版本的分布,基于设备访问Google Play商店的次数.通常情况下,支持90%的活跃设备同时使用最新版本作为target是一个好习惯. 贴士: 为了在不同的Android版本上提供最好的特性和功能,你应该在你的应用中使用Android

iOS开发之聊天模块--内容保存逻辑实现

需求详解: 在实际开发中,有可能是在后期优化的时候,会有这么需要优化的需求:聊天输入框保存之前输入的文本,提高用户的良好体验. 在聊天模块中,用户可能会在输入框输入若干字符,但是没有点击发送就点击退出聊天,或者要点击用户头像确认用户的信息,或者比如需要向好友发送另一个好 友的ID不得不暂时退出当前好友聊天界面跳转找到别的界面找ID,然而当前聊天输入框也已经输入好了若干字符,用户当然不希望退出之后就删除之前输入好的 文字.所以这里就需要暂时保存用户输入好的但是没有发送出去的字符串. 但是,还需要满

iOS开发——封装自己的下拉菜单

效果图 思路 1.图片的拉伸: UIImage *image = [UIImage imageNamed:@"popover_background"]; image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(24, 0, 24, 0) resizingMode:UIImageResizingModeStretch]; -resizableImageWithCapInsets:resizingMode 方法的第二个参数,调

ios 6和 ios 7适配问题,让程序同时支持iOS 6和iOS 7,setEdgesForExtendedLayout

由于各种原因,我们的程序需要同时支持iOS 7以及之前的版本(例如iOS 6),也就是说开发者不得不同时在iOS 7和iOS 6之间进行开发.实际上开发者对此是比较讨厌的. iOS 7中的布局问题 下面是非常简单的一个程序,运行在iOS 6中的界面: 而要是运行在iOS 7的模拟器中,会看不到label了: 这是为什么呢?我们对其reveal一下看看吧: 从上图可以看出,实际上label躲在NavigationBar后面了.在iOS 7中,苹果引入了一个新的属性,叫做[UIViewControl

IOS开发-封装数据库sqlite3之为何选择FMDB

为什么使用第三方轻量级框架FMDB? FMDB是用于进行数据存储的第三方的框架,它与SQLite与Core Data相比较,存在很多优势. FMDB是面向对象的,它以OC的方式封装了SQLite的C语言API,使用起来更加的方便,不需要过多的关心数据库操作的知识. 为什么不使用core data和SQLite? Core Data是ORM的一种体现,实现了界面化操作.使用Core Data需要用到模型数据的转化,虽然操作简单,不需要直接操作数据库,但是性能没有直接使用SQLite高.但是SQLi

iOS开发日记50-文本转语音(TTS)

今天博主有一个文本转语音(TTS)的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步. 文本转语音技术, 也叫TTS, 是Text To Speech的缩写. iOS如果想做有声书等功能的时候, 会用到这门技术. iOS7之后才有该功能,需要导入 AVFoundation 库 //在iPhone静音模式开启后,声音无法播放,需要打开后台播放 AVAudioSession *audioSession = [AVAudioSession sharedInstance]; [audioSess

iOS开发 - 封装文件上传工具类

文件上传的步骤 1.设置请求头 * 目的:告诉服务器请求体里面的内容并非普通的参数,而是包含了文件参数 [request setValue:@"multipart/form-data; boundary=maljob" forHTTPHeaderField:@"Content-Type"]; 2.设置请求体 * 作用:存放参数(文件参数和非文件参数) 1> 非文件参数 [body appendData:MalJobEncode(@"--maljob\

iOS开发——装逼技术精选&全面了解 iOS 静态库开发

全面了解 iOS 静态库开发 简介 在企业开发中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,不想被外界知道,所以会把核心代码打包成静态库,只暴露头文件给程序员使用(比如:友盟.百度地图等第三方的sdk) 静态库和动态库的存在形式 静态库:.a 和 .framework 动态库:.dylib 和 .framework 静态库和动态库的区别 静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统