YYlabel添加復(fù)制

YYlabelCopy

前言

最近公司刷題項(xiàng)目重構(gòu),之前刷題是采用富文本渲染,性能極差,業(yè)界大神ibireme的YYKit想必大家都知道,YYText的好用之處我就不再贅述.一開(kāi)始我們是把UIlabel換成YYTextView,為什么不直接換成YYlabel,YYlabel支持異步繪制,因?yàn)槲覀兪亲龉柬?xiàng)目的,試題都要支持復(fù)制,選擇高亮,取消高亮,所以選擇了YYtextView,測(cè)試比之前效果好一點(diǎn),但是還是有點(diǎn)卡頓.因?yàn)閅YtextView的textLayout是私有屬性,每次賦值調(diào)用富文本,都會(huì)有一定的性能開(kāi)銷,所以準(zhǔn)備怎么實(shí)現(xiàn)YYlabe支持復(fù)制,高亮,取消高亮功能

效果圖

[

sKeWGQ.png
](https://imgchr.com/i/

github下載地址

YYlabelCopy

思路

首先YYlabel是基于coretext繪制的,我在在YYtext中會(huì)發(fā)現(xiàn)一個(gè)類YYTextLayout,YYTextLayout是YYtext的強(qiáng)大之處,里面處理了大量計(jì)算,保存了大量的繪制信息.我們拿到這個(gè)類,就能取到我們想要的一些位置信息.

怎么做才能對(duì)YYtext的入侵比較小呢,這里我采用了分類,去為YYlabel添加一些方法,用關(guān)聯(lián)對(duì)象添加一些屬性.在手勢(shì)點(diǎn)擊的時(shí)候,記錄點(diǎn)擊的位置,當(dāng)手勢(shì)開(kāi)始滑動(dòng)的時(shí)候,彈出放大鏡,在計(jì)算手勢(shì)滑動(dòng)的位置,用CALayer在YYlabel上添加圖層,實(shí)現(xiàn)選中的軌跡,高亮,和取消高亮是YYlabel提供的一個(gè)方法
[text yy_setTextHighlightRange:range
color:[UIColor blueColor]
backgroundColor:[UIColor grayColor]
tapAction:^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect){
NSLog(@"tap text range:...");
}]
最終完美實(shí)現(xiàn),目前已在線上穩(wěn)定運(yùn)行,具體使用只需要引入分類頭文件,一行代碼搞定[label addGestureRecognizer]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容