iOS中的異步渲染探究,以及基于異步渲染的高度自定富文本框架構(gòu)建
此前一直猶豫要不要寫(xiě)個(gè)自己的異步渲染庫(kù),最近趕上疫情,正好有時(shí)間,花了幾周,完善了一個(gè)富文本的異步渲染庫(kù),源碼地址 LRJAansyDraw,
功能如下
1,文本響應(yīng)區(qū)域自定義,高度預(yù)計(jì)算
2,方便加入圖片,并設(shè)置位置,方便加入標(biāo)簽
3,自定義斷行,異步渲染,永不卡頓
4 ,富文本的簡(jiǎn)易設(shè)置與自定義刪除線,分割線等等, 還有很多其他的功能方便用戶自行擴(kuò)展
5, 自定義的item重新生成一個(gè)新的圖片,非常方便,意味著,你上次繪制的內(nèi)容可以方便的生成圖片
6,如果有任何其他的需求,請(qǐng)聯(lián)系作者
LRJ_SampleCoreTextView *viewBase = [LRJ_SampleCoreTextView new];
LRJ_MutableAttributedItem *itme1 = [[LRJ_MutableAttributedItem alloc] initWithText:@"異步繪制的基礎(chǔ)demo"]; [itme1 setFont:[UIFont systemFontOfSize:18]];
[itme1 setColor:[UIColor redColor]]; LRJ_MutableAttributedItem *itme2 = [[LRJ_MutableAttributedItem alloc] initWithText:@"點(diǎn)擊相應(yīng)區(qū)域"];
[itme2 addTarget:self action:@selector(pushAction:) forControlEvents:UIControlEventTouchUpInside]; [itme2 setFont:[UIFont systemFontOfSize:18]];
[itme2 setColor:[UIColor orangeColor]]; [itme1 appendAttributedItem:itme2]; [itme1 appendWhiteSpaceWithWidth:20]; viewBase.backgroundColor = [UIColor blackColor]; __weak typeof(viewBase) weakViewBase = viewBase;
viewBase.trancatedBlock = ^{ weakViewBase.numerOfLines = 0;
CGSize size = [itme1.resultString wmg_sizeConstrainedToWidth:[UIScreen mainScreen].bounds.size.width - 20 numberOfLines:0];
weakViewBase.frame = CGRectMake(10, 10, size.width, size.height); [weakViewBase redraw]; }; viewBase.frame = CGRectMake(10, 10, size.width, size.height + 5);
[self.view addSubview:viewBase];
self.myView = viewBase;
此處放入一些簡(jiǎn)單的效果展示,并不代表只有這些功能,只是暫時(shí)滿足絕大多數(shù)場(chǎng)景的需求

image
結(jié)尾 :此庫(kù)力求好用,希望有此需要的同學(xué),能夠使用,并且我會(huì)積極去豐富更多的功能,也可以提給我更多的你所需要的功能
補(bǔ)充:另外提供了很多點(diǎn)擊區(qū)域響應(yīng),控制點(diǎn)擊樣式或者點(diǎn)擊相應(yīng)區(qū)域自定義

image
補(bǔ)充2:參考部分同學(xué)提出的需求,完成了虛線和波浪線的需求
IMG_3730.PNG.JPG
用法:
/**
* 設(shè)置AttributedItem的刪除線波浪線
*
* @param color 波浪線風(fēng)格
*
*/
- (void)setWaveLineThroughColor:(UIColor *)color;
[itme3 setWaveLineThroughColor:[UIColor redColor]];