YYlabelCopy

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:range
                       color:[UIColor blueColor]
             backgroundColor:[UIColor grayColor]
                   tapAction:^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect){ 
                       NSLog(@"tap text range:..."); 
                   }]

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值