码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发 - 第05篇 - 项目 - 10 - 发微博

时间:2016-08-17 09:01:46      阅读:249      评论:0      收藏:0      [点我收藏+]

标签:

1、点击表情


1.1 表情放大界面


技术分享


1.2 实现思路


1>监听表情按钮点击

2>同一时间只能显示一个放大镜,创建一个即可,不用重复创建

3>放大镜应该作为一个整体HWEmotionPopView,而且比较简单,用XIB来实现即可,提供类方法

4>在HWEmotionPageView中懒加载HWEmotionPopView

1HWEmotionPopView添加位置问题,若添加在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中读取


技术分享


iOS开发 - 第05篇 - 项目 - 10 - 发微博

标签:

原文地址:http://blog.csdn.net/nsryan/article/details/52216814

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!