YYlabelCopy

前言

最近公司刷题项目重构,之前刷题是采用富文本渲染,性能极差,业界大神ibireme的YYKit想必大家都知道,YYText的好用之处我就不再赘述.一开始我们是把UIlabel换成YYTextView,为什么不直接换成YYlabel,YYlabel支持异步绘制,因为我们是做公考项目的,试题都要支持复制,选择高亮,取消高亮,所以选择了YYtextView,测试比之前效果好一点,但是还是有点卡顿.因为YYtextView的textLayout是私有属性,每次赋值调用富文本,都会有一定的性能开销,所以准备怎么实现YYlabe支持复制,高亮,取消高亮功能

效果图

github下载地址

YYlabelCopy

思路

首先YYlabel是基于coretext绘制的,我在在YYtext中会发现一个类YYTextLayout,YYTextLayout是YYtext的强大之处,里面处理了大量计算,保存了大量的绘制信息.我们拿到这个类,就能取到我们想要的一些位置信息.

怎么做才能对YYtext的入侵比较小呢,这里我采用了分类,去为YYlabel添加一些方法,用关联对象添加一些属性.在手势点击的时候,记录点击的位置,当手势开始滑动的时候,弹出放大镜,在计算手势滑动的位置,用CALayer在YYlabel上添加图层,实现选中的轨迹,高亮,和取消高亮是YYlabel提供的一个方法

[text yy_setTextHighlightRange:rangecolor:[UIColor blueColor]backgroundColor:[UIColor grayColor]tapAction:^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect){ NSLog(@"tap text range:..."); }]

最终完美实现,目前已在线上稳定运行,具体使用只需要引入分类头文件,一行代码搞定
[label addGestureRecognizer]

YYlabelCopy相关推荐

最新文章

  1. 干货 | 基于贝叶斯推断的分类模型 机器学习你会遇到的“坑”
  2. python压缩包怎么安装-Python学习笔记-打包发布Python模块或程序,安装包
  3. spring注解源码分析--how does autowired works?
  4. Java设计模式 - 适配器模式
  5. 信息系统项目管理师:第5章:项目范围管理- 章节真题+解析
  6. LoadRunner 8.1 学习笔记4
  7. ${}和#{}的区别
  8. Supervisor使用教程
  9. Lucene知识小总结4:索引的反删除
  10. Spring Shell项目发布
  11. CF#420 B. Okabe and Banana Trees 思维|暴力|几何
  12. 手机MODEM 开发(23)---Modem1 NVRAM基础知识总结
  13. python setup.py卸载
  14. python数据存储系列教程——xls文件的读写、追加(xlwt、xlwt、xlutils)
  15. 9. Browser 对象 - Location 对象
  16. 基于jsp的博客系统
  17. Windows 10 2018年四月更新版官方正式版
  18. MTK6737功能展示
  19. 【视频学习笔记】计算机视觉与深度学习_北京邮电大学_鲁鹏(⭐⭐⭐⭐⭐)
  20. 关于Vue中$nextTick的作用及实现原理(Vue进阶)

热门文章

  1. CAAI演讲实录丨李德毅院士:交互认知——从图灵测试的漏洞谈开去
  2. 微信重磅功能更新!加好友按人数收费,视频号付费订阅、微信版“知乎”来了...
  3. JS生成26个英文字母
  4. 一个优秀的团队的重要性
  5. 学习编程:能边玩边学的10个游戏编程网站,这样学编程可好玩了
  6. 小黑小波比.极客学院.HTML5学习笔记
  7. pytorch - GAN
  8. iOS基础:新浪微博授权机制、 版本新特性
  9. Windows系统下CMD添加删除用户、用户组
  10. W99、阿里大学征服路 - W系列总纲