1、点击表情
1.1 表情放大界面
1.2 实现思路
1>监听表情按钮点击
2>同一时间只能显示一个放大镜,创建一个即可,不用重复创建
3>放大镜应该作为一个整体HWEmotionPopView,而且比较简单,用XIB来实现即可,提供类方法
4>在HWEmotionPageView中懒加载HWEmotionPopView
注1:HWEmotionPopView添加位置问题,若添加在HWEmotionPageView上面,则会被上面工具台挡住,因此,应该添加到最上面的窗口UIWindow,而且不是keyWindow,因为弹出的键盘也是一个UIWindow,覆盖在keyWindow之上,keyWindow是后面的主控制器!!!
注2:由于添加到UIWindow上,坐标系发生变化,要注意坐标系转换
5>设置HWEmotionPopView里面的按钮表情,需要在点击按钮的时候,拿出按钮对应的Emotion模型,设置给HWEmotionPopView
方法一:给每一个表情按钮绑定tag,根据tag取出self.emotions数组中的Emotion模型;
方法二:
1. 一个按钮对应一个表情模型,应该自定义按钮,给每个按钮一个表情模型,以后可以直接根据按钮取出表情模型,且重写按钮中表情模型的setter方法,将png还是code设置按钮显示封装到里面
2. 设置HWEmotionPopView里面的按钮表情也只需要传给其一个表情模型即可,XIB里面的按钮对应自定义表情按钮
HWEmotionPageView表情按钮点击
2、插入表情
2.1 小处理
1>点击表情取消高亮
方法一:重写按钮的setHighlighted:方法
方法二:self.adjustsImageWhenHighlighted= NO;按钮高亮的时候,不要去调整图片(不要调整图片会灰色)
2>popView消失
GCD延时后移除
2.2 插入表情思路
实现:点击表情按钮往控制器中的textView插入表情
方法一:使用代理,但是层级结构太深,要拿到textView只能通过控制器,需要不断使用代理传递出去:
HWEmotionPageView——HWEmotionListView——HWEmotionKeyboard——HWComposeViewController——HWEmotionTextView
方法二:使用通知,由系统管理,表情按钮点击发送通知即可,控制器接收通知
关键:使用NSAttributedString进行图文混排!!!
注1:图文混排最好放在textView中处理,不要直接在控制器中处理
注2:不应该直接将处理表情文字的操作放到WBTextView中,否则直接会和HWEmotion关联,导致WBTextView只能用在当前项目中,应该再自定义一个textView,继承自WBTextView,专门用来处理表情文字
3、封装TextView
1>写一个UITextView的分类,封装insertAttributeText:方法,可以插入带属性文字
注:但是关于字体的设置不应该封装到里面
2>重写setAttributeText方法,保证输入表情,删除占位符
3>添加删除按钮
注意:在initWithFrame:方法中添加按钮,布局时第一个按钮是删除按钮,不是表情按钮,注意subViews
4、BUG修复
4.1 删除操作
4.2 键盘上面工具条位置
问题:当使用中文键盘后,键盘高度会变高(提示中文),再次点击表情键盘时,工具条位置不会改变
原因:设置了switchingKeybaord
解决办法:让工具条对新弹出的键盘做出反应!!!
即:在旧键盘退出的时候,不要改变frame,再新键盘弹出的时候再根据新键盘做出反应
4.3 表情文字变小
在插入表情图片的时候,表情图片会变小,文字也会变小
原因:在插入表情的时候,设置字体,在插入表情之后操作
若放在插入属性文字里面操作就不会出现变小的情况,即先设置好字体,再给self.attributedText赋值就行
即:一旦self.attributedText= attributedText;后再取出来在外面设置字体就不好使!
关键原因:self.attributedText的属性为copy属性,为拷贝属性,外面文本改了不会影响到里面的文本
但是将设置字体的方法放到里面又不太合适,因为该方法只是用来插入属性文字,不需要管字体
解决办法:使用block,将设置字体的代码放到block里面!!!
5、发带表情微博
方法:将所有图片表情转为文字描述,发给新浪
1>HWEmotionTextView中提供一个方法,将textView中所有图片文字,转为NSString
关键:遍历attributedText,找出所有的图片表情,将其转化为文字描述!!!
注:现在的attch只能拿到设置的UIImage,为了从attch中拿到当初设置emotion中的表情文字描述,即要实现拿到attach就能拿到对应的emotion,可以自定义HWEmotionAttachment,增加一个emotion属性!!!
2>自定义HWEmotionAttachment
6、长按表情
实现:长按表情会弹出对应的表情popView,再拖动时候显示相应表情popView
方法:给pageView增加长按手势
注1:将显示PopView的代码封装到WBEmotionPopView中,传给一个表情按钮
注2:原先WBEmotionPopView中设置表情模型的方法就可以去掉,直接设置表情按钮即可
1>HWEmotionPopView
2>HWEmotionPageView
7、表情键盘最近标签页
注1:要将最近使用的表情存放进沙盒
注2:在表情按钮点击或者长按松开的时候存入沙盒
注3:提供一个WBEmotionTool管理表情存储,取出
注:MJCodingImplementation宏可以替代下面两个方法
HWEmotionPageView中存储
HWEmotionKeyboard中读取