之前山寨了一个新浪微博(OS开发之微信山寨版),今天就开始给微信加上具体的实现功能,那么就先从微信的聊天界面开始吧。提到封装是少不了写代码的,在封装组件的时候,为了组件的可移植性,我们就不能用storyboard来拖拽了。为了屏幕的适配,适应不同屏幕的手机,所以在封装组件的时候是少不了为我们的组件来添加约束。今天博客中的所有代码都是脱离storyboard的,这些代码在别的工程中也是可以使用的。好,废话少说,切入今天的正题。
微信大家基本上都用过,今天要做的就是微信的聊天工具条。聊天工具条还是比较复杂的,其中包括发送表情,发送文字,发送图片,发送声音,拍照等等功能,下面给出发送录音,文字,表情的代码,其他的和这几样类似。还是那句话百字不如一图,先来几张效果图吧。
在封装聊天工具条的的时候表情键盘是之前封装好的(请参考:“iOS开发之自定义表情键盘(组件封装与自动布局)”),所以拿过来就可以用的啦。因为不管是工具条还是表情键盘都是用约束来控件大小的,所以横屏也是没问题的,在大屏手机上也是没问题的。下面将会一步步讲解如何封装下面的聊天工具条。主要是对工具条的封装,表情键盘在这就不做讲解了。
一、ToolView预留的接口
在封装ToolView中主要用到Block回调,读者可以根据自己的个人习惯来选择是Block回调,还是委托回调或者是目标动作回调(笔者更喜欢Block回调),下面的代码是ToolView给调用者提供的接口
1 // 2 // ToolView.h 3 // MecroMessage 4 // 5 // Created by (青玉伏案:博客地址(http://www.cnblogs.com/ludashi/)) on 14-9-22. 6 // Copyright (c) 2014年 Mrli. All rights reserved. 7 // 8 9 #import <UIKit/UIKit.h> 10 11 12 //定义block类型把ToolView中TextView中的文字传入到Controller中 13 typedef void (^MyTextBlock) (NSString *myText); 14 15 //录音时的音量 16 typedef void (^AudioVolumeBlock) (CGFloat volume); 17 18 //录音存储地址 19 typedef void (^AudioURLBlock) (NSURL *audioURL); 20 21 //改变根据文字改变TextView的高度 22 typedef void (^ContentSizeBlock)(CGSize contentSize); 23 24 //录音取消的回调 25 typedef void (^CancelRecordBlock)(int flag); 26 27 28 @interface ToolView : UIView<UITextViewDelegate,AVAudioRecorderDelegate> 29 30 31 //设置MyTextBlock 32 -(void) setMyTextBlock:(MyTextBlock)block; 33 34 //设置声音回调 35 -(void) setAudioVolumeBlock:(AudioVolumeBlock) block; 36 37 //设置录音地址回调 38 -(void) setAudioURLBlock:(AudioURLBlock) block; 39 40 -(void)setContentSizeBlock:(ContentSizeBlock) block; 41 42 -(void)setCancelRecordBlock:(CancelRecordBlock)block; 43 44 -(void) changeFunctionHeight: (float) height; 45 46 @end