YYKit框架学习之YYLabel

作者: 大白菜s | 来源:发表于2017-05-11 16:35 被阅读808次

一、YYLabel

强大的富文本显示功能,可根据文字的range随意添加点击事件

1 自动换行

YYLabel  *yyLabel = [YYLabel new];

yyLabel.numberOfLines = 0;

创建容器

YYTextContainer *titleContarer = [YYTextContainer new];

限制宽度

titleContarer.size = CGSizeMake([UIScreen mainScreen].bounds.size.width-40,CGFLOAT_MAX);

设置富文本

NSMutableAttributedString  *resultAttr = [self getAttr:title];

根据容器和文本创建布局对象

YYTextLayout *titleLayout = [YYTextLayout layoutWithContainer:titleContarer text:resultAttr];

得到文本高度

CGFloat titleLabelHeight = titleLayout.textBoundingSize.height;

设置frame

yyLabel.frame = CGRectMake(20,84,[UIScreen mainScreen].bounds.size.width-40,titleLabelHeight);

2 各种格式设置

对齐方式 这里是 两边对齐

resultAttr.alignment = NSTextAlignmentCenter;

设置行间距

resultAttr.lineSpacing = 3;

resultAttr.font = [UIFont systemFontOfSize:20];

{

NSRange range =  [attributedString rangeOfString:@"it was the worst of times"];

[resultAttr setFont:[UIFont boldSystemFontOfSize:30] range:range];

}

描边

{

NSRange range =[attributedString rangeOfString:@"it was the age of wisdom"];

//文字描边(空心字)默认黑色,必须设置width

[resultAttr setStrokeColor:[UIColor orangeColor] range:range];

[resultAttr setStrokeWidth:@(2) range:range];

}

划线

{

NSRange range = [attributedString rangeOfString:@"it was the age of foolishness, it was the season of light" options:NSCaseInsensitiveSearch];

YYTextDecoration *decoration = [YYTextDecoration decorationWithStyle:YYTextLineStyleSingle

width:@(1)

color:[UIColor blueColor]];

//删除样式

[resultAttr setTextStrikethrough:decoration range:range];

//下划线

[resultAttr setTextUnderline:decoration range:range];

}

设置边框

{

NSRange range = [attributedString rangeOfString:@"这是最好的时代,这是最坏的时代" options:NSCaseInsensitiveSearch];

//边框

YYTextBorder *border = [YYTextBorder new];

border.strokeColor = [UIColor redColor];

border.strokeWidth = 4;

border.lineStyle = YYTextLineStylePatternDashDotDot;

border.cornerRadius = 1;

border.insets = UIEdgeInsetsMake(0, -2, 0, -2);

[resultAttr setTextBorder:border range:range];

}

设置阴影

{

NSRange range = [attributedString rangeOfString:@"这是智慧的时代,这是愚蠢的时代" options:NSCaseInsensitiveSearch];

//阴影

NSShadow *shadow = [[NSShadow alloc] init];

[shadow setShadowColor:[UIColor redColor]];

[shadow setShadowBlurRadius:1.0];

[shadow setShadowOffset:CGSizeMake(2, 2)];

[resultAttr setShadow:shadow range:range];

}

3 高亮显示文本 点击交互事件

{

NSRange range = [attributedString rangeOfString:@"这是希望之春,这是失望之冬" options:NSCaseInsensitiveSearch];

YYTextBorder *border = [YYTextBorder new];

border.cornerRadius = 50;

border.insets = UIEdgeInsetsMake(0, -10, 0, -10);

border.strokeWidth = 0.5;

border.strokeColor = [UIColor yellowColor];

border.lineStyle = YYTextLineStyleSingle;

[resultAttr setTextBorder:border range:range];

[resultAttr setTextBackgroundBorder:border range:range];

[resultAttr setColor:[UIColor greenColor] range:range];

YYTextBorder *highlightBorder = border.copy;

highlightBorder.strokeWidth = 0;

highlightBorder.strokeColor =  [UIColor purpleColor];

highlightBorder.fillColor =  [UIColor purpleColor];

YYTextHighlight *highlight = [YYTextHighlight new];

[highlight setColor:[UIColor whiteColor]];

[highlight setBackgroundBorder:highlightBorder ];

highlight.tapAction = ^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect) {

[self alertShow:[NSString stringWithFormat:@"Tap: %@",[text.string substringWithRange:range]]];

};

[resultAttr setTextHighlight:highlight range:range];

// 点击复制

[resultAttr setTextHighlightRange:[attributedString rangeOfString:@"450351763"]

color:[UIColor greenColor]

backgroundColor:[UIColor whiteColor]

tapAction:^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect){

UIPasteboard *pboard = [UIPasteboard generalPasteboard];

pboard.string = @"450351763";

[self alertShow:@"复制成功"];

}];

}

4 图文混排 支持各种格式包括gif

{

for (int i = 1; i<5; i++) {

NSString *path;

if(i == 4){

path = [[NSBundle mainBundle] pathForScaledResource:[NSString stringWithFormat:@"%d",i] ofType:@"gif"];

}else{

path = [[NSBundle mainBundle] pathForScaledResource:[NSString stringWithFormat:@"%d",i] ofType:@"jpg"];

}

NSData *data = [NSData dataWithContentsOfFile:path];

//修改表情大小

YYImage *image = [YYImage imageWithData:data scale:3];

image.preloadAllAnimatedImageFrames = YES;

YYAnimatedImageView *imageView = [[YYAnimatedImageView alloc] initWithImage:image];

NSMutableAttributedString *attachText = [NSMutableAttributedString attachmentStringWithContent:imageView contentMode:UIViewContentModeCenter attachmentSize:imageView.size alignToFont:[UIFont systemFontOfSize:18] alignment:YYTextVerticalAlignmentCenter];

[resultAttr appendAttributedString:attachText];

}

}

YYkit推荐pod安装方式(我使用的是  pod 'YYKit', '~> 1.0.9' 最新版本)

以下为全部代码贴到项目中可以直接运行查看效果

@interfaceViewController2()

@end

@implementationViewController2

- (void)viewDidLoad {

[superviewDidLoad];

self.view.backgroundColor= [UIColorcolorWithRed:0.3green:0.5blue:0.8alpha:1];

[self showYYLabel];

}

-(void)showYYLabel{

NSString*title =@"It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the season of light, it was the season of darkness, it was the spring of hope, it was the winter of despair, we had everything before us, we had nothing before us. We were all going direct to heaven, we were all going direct the other way.\n这是最好的时代,这是最坏的时代;这是智慧的时代,这是愚蠢的时代;这是信仰的时期,这是怀疑的时期;这是光明的季节,这是黑暗的季节;这是希望之春,这是失望之冬;人们面前有着各样事物,人们面前一无所有;人们正在直登天堂,人们正在直下地狱。\n点击复制QQ450351763进行在线咨询";

YYLabel  *yyLabel = [YYLabelnew];

yyLabel.backgroundColor= [UIColorcolorWithRed:0.3green:0.4blue:0.1alpha:1];

//异步显示

yyLabel.displaysAsynchronously=YES;

yyLabel.numberOfLines=0;

//创建容器

YYTextContainer*titleContarer = [YYTextContainernew];

//限制宽度

titleContarer.size= CGSizeMake([UIScreenmainScreen].bounds.size.width-40,CGFLOAT_MAX);

//设置富文本

NSMutableAttributedString  *resultAttr = [selfgetAttr:title];

//根据容器和文本创建布局对象

YYTextLayout*titleLayout = [YYTextLayoutlayoutWithContainer:titleContarertext:resultAttr];

//得到文本高度

CGFloat titleLabelHeight = titleLayout.textBoundingSize.height;

//设置frame

yyLabel.frame= CGRectMake(20,84,[UIScreenmainScreen].bounds.size.width-40,titleLabelHeight);

yyLabel.attributedText= titleAttr;

[self.viewaddSubview:yyLabel];

}

- (NSMutableAttributedString*)getAttr:(NSString*)attributedString {

NSMutableAttributedString*resultAttr = [[NSMutableAttributedStringalloc]initWithString:attributedString];

//    一、 格式设置

//对齐方式 这里是 两边对齐

resultAttr.alignment= NSTextAlignmentCenter;

//设置行间距

resultAttr.lineSpacing=3;

resultAttr.font= [UIFontsystemFontOfSize:20];

{

NSRange range =  [attributedStringrangeOfString:@"it was the worst of times"];

[resultAttrsetFont:[UIFontboldSystemFontOfSize:30]range:range];

}

//描边

{

NSRange range =[attributedStringrangeOfString:@"it was the age of wisdom"];

//文字描边(空心字)默认黑色,必须设置width

[resultAttrsetStrokeColor:[UIColororangeColor]range:range];

[resultAttrsetStrokeWidth:@(2)range:range];

}

//划线

{

NSRange range = [attributedStringrangeOfString:@"it was the age of foolishness, it was the season of light"options:NSCaseInsensitiveSearch];

YYTextDecoration*decoration = [YYTextDecorationdecorationWithStyle:YYTextLineStyleSingle

width:@(1)

color:[UIColorblueColor]];

//删除样式

[resultAttrsetTextStrikethrough:decorationrange:range];

//下划线

[resultAttrsetTextUnderline:decorationrange:range];

}

//设置边框

{

NSRange range = [attributedStringrangeOfString:@"这是最好的时代,这是最坏的时代"options:NSCaseInsensitiveSearch];

//边框

YYTextBorder*border = [YYTextBordernew];

border.strokeColor= [UIColorredColor];

border.strokeWidth=4;

border.lineStyle= YYTextLineStylePatternDashDotDot;

border.cornerRadius=1;

border.insets= UIEdgeInsetsMake(0, -2,0, -2);

[resultAttrsetTextBorder:borderrange:range];

}

//设置阴影

{

NSRange range = [attributedStringrangeOfString:@"这是智慧的时代,这是愚蠢的时代"options:NSCaseInsensitiveSearch];

//阴影

NSShadow*shadow = [[NSShadowalloc]init];

[shadowsetShadowColor:[UIColorredColor]];

[shadowsetShadowBlurRadius:1.0];

[shadowsetShadowOffset:CGSizeMake(2,2)];

[resultAttrsetShadow:shadowrange:range];

}

//高亮显示文本

{

NSRange range = [attributedStringrangeOfString:@"这是希望之春,这是失望之冬"options:NSCaseInsensitiveSearch];

YYTextBorder*border = [YYTextBordernew];

border.cornerRadius=50;

border.insets= UIEdgeInsetsMake(0, -10,0, -10);

border.strokeWidth=0.5;

border.strokeColor= [UIColoryellowColor];

border.lineStyle= YYTextLineStyleSingle;

[resultAttrsetTextBorder:borderrange:range];

[resultAttrsetTextBackgroundBorder:borderrange:range];

[resultAttrsetColor:[UIColorgreenColor]range:range];

YYTextBorder*highlightBorder = border.copy;

highlightBorder.strokeWidth=0;

highlightBorder.strokeColor=  [UIColorpurpleColor];

highlightBorder.fillColor=  [UIColorpurpleColor];

YYTextHighlight*highlight = [YYTextHighlightnew];

[highlightsetColor:[UIColorwhiteColor]];

[highlightsetBackgroundBorder:highlightBorder ];

highlight.tapAction= ^(UIView*containerView,NSAttributedString*text, NSRange range, CGRect rect) {

[selfalertShow:[NSStringstringWithFormat:@"Tap: %@",[text.stringsubstringWithRange:range]]];

};

[resultAttrsetTextHighlight:highlightrange:range];

// 点击复制

[resultAttrsetTextHighlightRange:[attributedStringrangeOfString:@"450351763"]

color:[UIColorgreenColor]

backgroundColor:[UIColorwhiteColor]

tapAction:^(UIView*containerView,NSAttributedString*text, NSRange range, CGRect rect){

UIPasteboard*pboard = [UIPasteboardgeneralPasteboard];

pboard.string=@"450351763";

[selfalertShow:@"复制成功"];

}];

}

//    图文混排

{

for(inti =1; i<5; i++) {

NSString*path;

if(i ==4){

path = [[NSBundlemainBundle]pathForScaledResource:[NSStringstringWithFormat:@"%d",i]ofType:@"gif"];

}else{

path = [[NSBundlemainBundle]pathForScaledResource:[NSStringstringWithFormat:@"%d",i]ofType:@"jpg"];

}

NSData*data = [NSDatadataWithContentsOfFile:path];

//修改表情大小

YYImage*image = [YYImageimageWithData:datascale:3];

image.preloadAllAnimatedImageFrames=YES;

YYAnimatedImageView*imageView = [[YYAnimatedImageViewalloc]initWithImage:image];

NSMutableAttributedString*attachText = [NSMutableAttributedStringattachmentStringWithContent:imageViewcontentMode:UIViewContentModeCenterattachmentSize:imageView.sizealignToFont:[UIFontsystemFontOfSize:18]alignment:YYTextVerticalAlignmentCenter];

[resultAttrappendAttributedString:attachText];

}

}

returnresultAttr;

}

-(void)alertShow:(NSString*)str{

UIAlertController*vc =  [UIAlertControlleralertControllerWithTitle:nilmessage:strpreferredStyle:UIAlertControllerStyleActionSheet];

[self.navigationControllerpresentViewController:vcanimated:YEScompletion:^{

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5* NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

[vcdismissViewControllerAnimated:YEScompletion:^{

}];

});

}];

}

相关文章

  • YYKit框架学习之YYLabel

    一、YYLabel 强大的富文本显示功能,可根据文字的range随意添加点击事件 1 自动换行 YYLabel *...

  • YYKit之YYLabel

    本文只对富文本中部分文字添加点击事件做简单介绍 1.添加点击事件 YYLabel中给部分文字添加点击事件主要是在富...

  • YYKit 学习笔记之 YYLabel

    原文链接:https://blog.csdn.net/xu_yu_jie/article/details/9278...

  • 2019-06-30

    YYKit 有迹可循 YYLabel -> _state == 23条(“bitfield”数据结构) YYTex...

  • iOS实现创建一个全局长驻队列池

    YYKit真是一个非常优秀的框架!最近看YYLabel源码,看到其中一段代码非常有意思,作者在要display l...

  • YYLabel的简单使用

    不得不说 YYKit 框架确实很牛,其YYLabel组件在富文本显示和操作方面相当强大,尤其是其异步渲染,让界面要...

  • YYKit的使用!!!

    YYLabel作者相关地址 首先附上yykit的地址 https://github.com/ibireme/YYK...

  • YYKit之YYLabel多个点击事件

    最近,因为这个Lable多个字段点击事件头疼不已,一开始用的别的第三方,最终总是Cell高度计算不准确,纠结了好久...

  • YYText源码分析

    YYText 简单介绍 YYText 是YYKit中的一个富文本显示,编辑组件,拥有YYLabel,YYText...

  • YYKit之YYText、YYLabel使用总结(更新)

    1.索引 YYText YYLabel 更新 YYText IQKeyboardManager支持 布局问题 如果...

网友评论

    本文标题:YYKit框架学习之YYLabel

    本文链接:https://www.haomeiwen.com/subject/vvnotxtx.html