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

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中读取

时间: 2024-10-08 01:01:23

iOS开发 - 第05篇 - 项目 - 10 - 发微博的相关文章

iOS开发 - 第05篇 - 项目 - 11 - const & git & 项目重构

1.发微博键盘最近标签页完善 问题: 1>表情出现重复 2>其他标签页转换到最近标签也没有及时出现最新使用表情 1.1 表情实时刷新 方法一:切换到最近标签页,刷新最新使用表情 注:需要在listView中表情数组的setter方法中先移除之前的控件,并在最后[selfsetNeedsLayout]; 方法二:上述方法只能在其他标签页切换到最近标签页的时候刷新表情,若在最近页需要点击表情按钮立即刷新,需要监听表情按钮点击的通知 1.2 表情重复问题 在表情工具类,存储表情的时候增加判断,删除重

iOS开发 - 第05篇 - 项目 - 04 - OAuth授权 & 首页

1.存储帐号信息 1.1 基本实现 由于一旦授权成功,新浪返回的accessToken是同一个值(针对同一个第三方应用,同一个账号),为避免每次都重新登录,应该讲accessToken存储起来. 实现:先检测沙盒里面是否存在accessToken,若无,则意味从来没有登陆过,加载登录界面,一旦成功登录,就将获得的accessToken存进沙盒,下次进来就不需要再进行登录,直接从沙盒中取出accessToken,进入首页,获取用户数据. 1>在发送请求,成功获取accessToken方法后,将返回

iOS开发 - 第05篇 - 项目 - 12 - 图文混排

1.首页微博文字处理 对于之前微博项目中首页:微博文字中的用户名.话题.链接等文字需要高亮显示,表情字符串需要显示对应表情. 思路: 1>之前微博中的文字使用NSString,要达到不同文字的高亮显示,需要使用NSAttributedString 2>微博模型中增加一个属性,代表属性字符串 /** string     微博信息内容*/ @property(nonatomic, copy) NSString *text; /** string     微博信息内容 -- 带有属性的(特殊文字会

iOS开发 - 第05篇 - 项目 - 01 - 搭建框架

实现:仿新浪微博 1.项目配置 1> 取消横竖屏 2> 设置图标和启动图片 3> 删除MainStoryboard,全部代码创建 2.添加TabBarController 2.1 创建窗口 1>在didFinishLaunchingWithOptions方法中,创建窗口,设置根控制器,显示窗口 2> 添加TabBarController的子控制器 3>抽取重复代码 注:上述方法限制每次创建的都是UIViewController,实际使用中,需要设置不同的控制器作为Tab

iOS开发 - 第05篇 - 项目 - 02 - 导航栏

1.Debug下NSLog 2.Xcode图片拉伸 直接选中图片,在右侧属性中设置即可,避免代码拉伸. 3.添加搜索框 在发现控制器的导航栏中添加一个搜索框. 3.1 通过UISearchBar 系统自带的UISearchBar并不好用,不能改变其高度. 3.2 通过UITextField 3.3 自定义搜索框 注:由于上述创建搜索框控件在其他地方也有可能用得上,因此最好将其抽取出来,自定义一个搜索框控件 4.弹出下拉菜单 4.1 界面 4.2 设置导航栏的titleView 注1:设置UIBu

iOS开发 - 第05篇 - 项目 - 05 - 首页

1.下拉刷新 1.1 进入首页自动刷新 1.2 显示最新微博数量 注:弹出的UILabel应该添加到导航控制器的View上,而不应该添加到tableView上,否则会更随tableView一起滚动!!! 在发送请求成功后,调用下面方法(注意动画): 2.添加上拉刷新控件 1> 自定义HWLoadMoreFooter(XIB) 1. UILabel利用autoLayout填充View 2.添加转圈控件,勾选动画 2>提供类方法加载XIB控件 3> 添加到tableView的tableFoo

iOS开发 - 第05篇 - 项目 - 03 - 版本新特性 & OAuth授权

1.版本新特性 1.1 界面 程序第一次启动的时候会弹出新特性界面,之后启动不会出现. 1.2 实现思路 1> 新建一个HWNewfeatureViewController(继承自UIViewController) 2> 先将其设置为整个程序的根控制器,用于演示 3> 使用UIScrollView 4>添加UIPageControl 5> 设置UIScrollView代理,监听滚动,设置UIPageControl 2.控制器切换 2.1 一个View中显示其他控制器的View

IOS开发数据存储篇—IOS中的几种数据存储方式

IOS开发数据存储篇—IOS中的几种数据存储方式 发表于2016/4/5 21:02:09  421人阅读 分类: 数据存储 在项目开发当中,我们经常会对一些数据进行本地缓存处理.离线缓存的数据一般都保存在APP所在的沙盒之中.一般有以下几种: 1.PList(XML属性列表) 在使用plist进行数据存储和读取,只适用于系统自带的一些常用类型才能用,且必须先获取路径相对麻烦 //写入文件 NSString *doc = [NSSearchPathForDirectoriesInDomains(

iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)

iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController) 前面我们介绍了StoryBoard这个新技术,和纯技术编程的代码创建界面,本篇我们将介绍一个老的技术,但是在很多的公司或者库里面还是使用这个技术,既然如此它肯定有他的好处,至于好处这里我就不一一介绍了.在Xcode5之前是只能使用Xib或者代码的,而代码又对于很多初学者来说算是一个难题.毕竟不知道怎么下手.所以我就总结了一下这段时间自己编写程序的一个实例来说明怎么