博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
介绍个图文混排的开源库
阅读量:5114 次
发布时间:2019-06-13

本文共 3341 字,大约阅读时间需要 11 分钟。

  (涉及版权问题请联系我删贴,xuym1992@163.com)

一个非常不错的开源库!

今天使用了一下,非常的方便,感觉还缺少多种表情的支持(表面来看,可能我没发现吧),于是加了上去:

- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    M80AttributedLabel *label = [[M80AttributedLabel alloc]initWithFrame:CGRectZero];    label.font = [UIFont systemFontOfSize:15.f];    label.textColor = [UIColor purpleColor];    label.backgroundColor = [UIColor lightGrayColor];    label.lineSpacing = 0.0;        // 加一张图片    [label appendImage:[UIImage imageNamed:@"logo.jpg"]               maxSize:CGSizeMake(100, 100)                margin:UIEdgeInsetsMake(0, 100, 0, 0)             alignment:M80ImageAlignmentCenter];    // 此文本内有很多种表情(中括号内)    NSString *text  = @"\n有人问我为什么要去西藏\n谁都知道318这条天路难走又危险。[haha][haha][haha][haha]\n\t我回答道:“是内心驱使我去那里,因为那里有高原雪山,有哈达。”\n为了此次骑行,我辞掉工作并准备了很久,终于在2014年7月1日和队友们踏上了征途。\n\t除此之外[haha2]我喜欢骑行,其实并没有多么的热爱,就是喜欢而已,而318是每一位骑行者的终极梦想[haha][haha][haha]路途中困难重重,恶劣的天气[face37]以及物质的缺乏[face44][face43],每天都要骑上几十甚至几百公里。[haha]下雨下雪下冰雹最为艰苦,手指僵硬导致很难抓紧刹车把,很多时候一下坡就是一百多公里。无论怎么样,再多的苦难都是值得的,痛并快乐着[face39]。\n[haha][haha1][haha2][face44][face43]\n\n  如果有一天我不见了,那我一定在西藏。[face41]\n  如果有一天我不见了,那我一定在西藏。[face41]\n  如果有一天我不见了,那我一定在西藏。[face41]";        // 利用正则表达式找出文本内所有的表情名,也就是中括号里面的内容    NSArray *emotes = [self match:text withRegex:@"(?<=\\[).*?(?=\\])"];        // 在字符串内前后分别添加]和[,是为了方便找出表情两边的内容    text = [NSString stringWithFormat:@"]%@[", text];    // 如有换行,下面的正则表达式无法查出正确的内容(求高手帮忙写个咯),因此先把换行符转义了    text = [text stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"];    // 找出表情两边的内容    NSArray *texts  = [self match:text withRegex:@"(?<=\\]).*?(?=\\[)"];        for (NSUInteger i = 0; i < [texts count]; i++) {        NSString *s = [texts objectAtIndex:i];        // 根据上面的转义替换成换行符,这样绘制的时候就能换行了        s = [s stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];        [label appendText:s];        if (i < [texts count] - 1) {            [label appendImage:[UIImage imageNamed:[emotes objectAtIndex:i]]                       maxSize:CGSizeMake(20, 20)                        margin:UIEdgeInsetsZero                     alignment:M80ImageAlignmentBottom];        }    }    // 获取label的size(参数是label的最大size)    CGSize size = [label sizeThatFits:CGSizeMake(kScreenWidth, 600)];    label.frame = CGRectInset(CGRectMake(5, 20, size.width - 5*2, size.height),0, 0);    [self.view addSubview:label];}
- (NSArray *)match:(NSString *)string withRegex:(NSString *)regex {    NSError *error;    NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:regex                                                                                       options:NSRegularExpressionCaseInsensitive                                                                                         error:&error];    NSArray *matchResults = [regularExpression matchesInString:string options:0 range:NSMakeRange(0, string.length)];    NSString *tmpStr = @"";    NSMutableArray *matchs = [NSMutableArray array];    for (NSTextCheckingResult *match in matchResults) {        NSRange matchRange = [match range];        tmpStr = [string substringWithRange:matchRange];//        NSLog(@"=%@=", tmpStr);        [matchs addObject:tmpStr];    }    return matchs;}

 

演示Demo下载地址: (Xcode 6.1.1 & iOS SDK 8.1)

效果如图所示:

转载于:https://www.cnblogs.com/tianglin/p/4157696.html

你可能感兴趣的文章
前端框架性能对比
查看>>
@property中 retain 详解
查看>>
java8 stream初试,map排序,list去重,统计重复元素个数,获取map的key集合和value集合...
查看>>
Python爬虫个人记录(四)利用Python在豆瓣上写一篇日记
查看>>
jdk8 Function
查看>>
第二次作业
查看>>
迷茫中的自己
查看>>
burp suite 的intruder 四种攻击方式
查看>>
机器学习----人脸对齐的算法-ASM.AAM..CLM.SDM
查看>>
自定义文本选中样式
查看>>
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
查看>>
MySQL 数据库 的安装和基本管理
查看>>
note
查看>>
软件测试理论测试用例测试之等价类划分
查看>>
“分析EntityName出错”,视窗设计器你这是闹哪样?
查看>>
codeforces #321 div 2 B. Kefa and Company(尺取法)
查看>>
【POJ1470】Closest Common Ancestors
查看>>
php 利用 soap调用.Net的WebService asmx文件
查看>>
Junit核心——测试集(TestSuite)
查看>>
非GUI模式下运行JMeter和远程启动JMeter
查看>>