iOS YYKit学习之YYText的使用

前文

hihi,勇敢的小伙伴儿们大家好,好久不见~ 前段时间因为各种琐事缠身再加上情绪十分不稳定,所以未能及时与大家分享知识。

今天分享的是很出名的一个库了,是很久很久以前用的,想来还是分享一下比较合适,这个库就是YYKit,今天分享其中的YYText的使用~

在我很早之前有一篇博客iOS 把你的UILabel多彩起来实在是太简单了,已经不适合用很多场景,现在的Label一个比一个复杂,面对这种情况如何解决变成了一个棘手的问题,YYText的使用就可以大幅提高效率,节省开发的时间成本,高效快速的解决各种复杂的富文本效果。非常推荐使用。

正文

YYText的好用之处我就不再赘述。在这里简单分享一下使用方法,才疏学浅,还请各位海涵。

传送门在此YYText的Github地址,需要的小伙伴儿们可以自行下载使用。

一、我遇到的两种简单的富文本使用方法

1. 无点击效果的富文本

如图所示是一个很简单的富文本Label,包含两种颜色,三种字号。

iOS YYKit学习之YYText的使用_第1张图片

这种情况如何使用YYText实现呢?

实现方法很简单,首先在需要使用的地方导入YYText.h

#import "YYText.h"

然后使用如下代码:

#define rgba(a,b,c,d) [UIColor colorWithRed:a/255. green:b/255. blue:c/255. alpha:d]
#define kThemeColor rgba(255, 41, 65, 1)

    
UILabel *sumPriceLabel = [[UILabel alloc] initWithFrame:CGRectMake(15., 15., 200., 15.)];
{
    NSMutableAttributedString *text = [[NSMutableAttributedString alloc]     initWithString:@"合计:"];
    //设置字体颜色
    text.yy_color = rgba(140, 140, 140, 1); //此处是宏定义
    //设置字体字号
    text.yy_font = [UIFont systemFontOfSize:15.];

    NSMutableAttributedString *one = [[NSMutableAttributedString alloc]     initWithString:@"¥"];
    one.yy_color = kThemeColor; //此处是宏定义
    one.yy_font = [UIFont systemFontOfSize:11.];

    NSMutableAttributedString *two = [[NSMutableAttributedString alloc]     initWithString:@"105.00"];
    two.yy_color = kThemeColor;
    two.yy_font = [UIFont systemFontOfSize:17.];

    //将三段不同的文本拼接在一起
    [text appendAttributedString:one];
    [text appendAttributedString:two];
        
    //然后设置UILabel的attributeText即可
    sumPriceLabel.attributedText = text;
}

就可以轻松实现设计图上的富文本,非常方便好用。

2.有点击效果的富文本

如图所示,这里的颜色深的文字需要能够点击进入协议或政策界面让用户阅读,需要有点击事件的富文本。

iOS YYKit学习之YYText的使用_第2张图片

这种情况如何使用YYText实现呢?

实现方法也很简单,首先依然要在需要使用的地方导入YYText.h

#import "YYText.h"

然后使用如下代码:

#define SYSTEMFONT(FONTSIZE) [UIFont systemFontOfSize:FONTSIZE]
#define rgba(a,b,c,d) [UIColor colorWithRed:a/255. green:b/255. blue:c/255. alpha:d]


CGFloat font = 11.;
NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString:@"点击"];
//设置行间距
text.yy_lineSpacing = 2.5;
//设置文本字号
text.yy_font = SYSTEMFONT(font);
//设置字体颜色
text.yy_color = rgba(158, 158, 158, 1);
        
{
    NSMutableAttributedString *one = [[NSMutableAttributedString alloc] initWithString:@"注册"];
    one.yy_lineSpacing = 2.5;
    one.yy_font = SYSTEMFONT(font);
    one.yy_color = rgba(84, 84, 84, 1);
    [text appendAttributedString:one];
}

{
    NSMutableAttributedString *one = [[NSMutableAttributedString alloc] initWithString:@"按钮,即表示您同意"];
    one.yy_lineSpacing = 2.5;
    one.yy_font = SYSTEMFONT(font);
    one.yy_color = rgba(158, 158, 158, 1);
    [text appendAttributedString:one];
}

{
    NSMutableAttributedString *one = [[NSMutableAttributedString alloc] initWithString:@"《嚯货协议》"];
    one.yy_lineSpacing = 2.5;
    one.yy_font = SYSTEMFONT(font);
    one.yy_color = rgba(84, 84, 84, 1);
    //设置点击范围以及点击事件(必须先设置好然后再将富文本设置给YYLabel才可以生效)
    [one yy_setTextHighlightRange:one.yy_rangeOfAll
                                    color:rgba(84, 84, 84, 1)
                          backgroundColor:[UIColor colorWithWhite:0.000 alpha:0.220]
                                tapAction:^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect){
                                    //自定义代码,此处根据需要调整
                                }];
    [text appendAttributedString:one];
}

{
    NSMutableAttributedString *one = [[NSMutableAttributedString alloc] initWithString:@"、"];
    one.yy_lineSpacing = 2.5;
    one.yy_font = SYSTEMFONT(font);
    one.yy_color = rgba(84, 84, 84, 1);
    [text appendAttributedString:one];
}

{
    NSMutableAttributedString *one = [[NSMutableAttributedString alloc] initWithString:@"《嚯货隐私政策》"];
    one.yy_lineSpacing = 2.5;
    one.yy_font = SYSTEMFONT(font);
    one.yy_color = rgba(84, 84, 84, 1);
    //设置点击范围以及点击事件(必须先设置好然后再将富文本设置给YYLabel才可以生效)
    [one yy_setTextHighlightRange:one.yy_rangeOfAll
                                    color:rgba(84, 84, 84, 1)
                          backgroundColor:[UIColor colorWithWhite:0.000 alpha:0.220]
                                tapAction:^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect){
                                    //自定义代码,此处根据需要调整
                                }];
            
    [text appendAttributedString:one];
}

主要注意的是:富文本设置点击范围以及点击事件,必须先设置好然后再将富文本设置给YYLabel才可以生效。

接下来就建一个YYLabel类的label对象,将上面拼接好的富文本设置给它就可以啦~

YYLabel *label = [YYLabel new];
//将上面的富文本设置过来
label.attributedText = text;
//设置Label的水平对齐格式
label.textAlignment = NSTextAlignmentCenter;
//设置垂直对齐格式
label.textVerticalAlignment = YYTextVerticalAlignmentCenter;
//设置行数,0为多行
label.numberOfLines = 0;

以上是我遇到的两种需要处理的富文本情况,接下来我搬运一些详细的使用方法过来,大家也可以自行在github上学习。

二、详细使用方法

1.基础用法

// YYLabel(类似于UILabel) 
YYLabel * label = [YYLabel new ];
label.frame = ...
label.font = ...
label.textColor = ...
label.textAlignment = ...
label.lineBreakMode = ...
label.numberOfLines = ...
label.text = ...
    
// YYTextView(类似于UITextView) 
YYTextView * textView = [YYTextView new ];
textView.frame = ...
textView.font = ...
textView.textColor = ...
textView.dataDetectorTypes = ...
textView.placeHolderText = ...
textView.placeHolderTextColor = ...
textView.delegate = ...

2.富文本

// 1.创建属性字符串。
NSMutableAttributedString * text = [[ NSMutableAttributedString  alloc ] initWithString:@“ Some Text,blabla ... ” ];
    
// 2.将属性设置为文本,您几乎可以使用所有CoreText属性。
text.yy_font = [UIFont boldSystemFontOfSize:30 ];
text.yy_color = [UIColor blueColor ];
[文本yy_setColor: [的UIColor redColor ] 范围:NSMakeRange(0,4)];
text.yy_lineSpacing = 10 ;
    
// 3.设置为YYLabel或YYTextView。
YYLabel * label = [YYLabel new ];
label.frame = ...
label.attributedString = text;
    
YYTextView * textView = [YYTextView new ];
textView.frame = ...
textView.attributedString = text;

3.文本高亮

你可以用一些便利的方法设置文本高亮

[text yy_setTextHighlightRange:range
                       color:[UIColor blueColor]
             backgroundColor:[UIColor grayColor]
                   tapAction:^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect){ 
                       NSLog(@"tap text range:..."); 
                   }];

或者使用自定义配置设置文本高亮显示:

// 1.为文本创建“突出显示”属性。
YYTextBorder * border = [YYTextBorder borderWithFillColor: [UIColor grayColor ] cornerRadius:3 ];
   
YYTextHighlight * highlight = [YYTextHighlight new ];
[highlight setColor: [UIColor whiteColor ]];
[突出显示setBackgroundBorder: highlightBorder];
highlight.tapAction = ^(UIView * containerView,NSAttributedString * text,NSRange range,CGRect rect){
  NSLog(@“ tap text range:... ”); 
 //您还可以将动作处理程序设置为YYLabel或YYTextView。
};
    
// 2.将“突出显示”属性添加到一系列文本中。
[attributionText yy_setTextHighlight: highlight range: highlightRange];
    
// 3.将文本设置为标签或文本视图。
YYLabel * label = ...
label.attributedText = attributedText
    
YYTextView * textView = ...
textView.attributedText = ...
    
// 4.接收用户交互操作。
label.highlightTapAction = ^(UIView * containerView, NSAttributedString * text, NSRange range, CGRect rect){
    NSLog( @“ tap text range:... ”);
};
label.highlightLongPressAction = ^(UIView * containerView,NSAttributedString * text,NSRange range,CGRect rect){
    NSLog(@“ long press text range:... ”);
};
    
@UITextViewDelegate
- (void)textView:(YYTextView *)textView didTapHighlight:(YYTextHighlight *)高亮显示inRange :( NSRange)characterRange rect :( CGRect)rect {
    NSLog(@“ tap text range:... ”);
}
- (void)textView:(YYTextView *)textView didLongPressHighlight:(YYTextHighlight *)高亮显示inRange :( NSRange)characterRange rect :( CGRect)rect {
    NSLog(@“ long press text range:... ”);
}

4.文本附件

NSMutableAttributedString * text = [ NSMutableAttributedString  new ];
UIFont * font = [UIFont systemFontOfSize :16 ];
NSMutableAttributedString * attachment = nil ;
	
// UIImage附件 
UIImage * image = [UIImage imageNamed:@“ dribbble64_imageio ” ];
attachment = [ NSMutableAttributedString  yy_attachmentStringWithContent: image contentMode: UIViewContentModeCenter attachmentSize: image.size alignToFont: font alignment: YYTextVerticalAlignmentCenter];
[text appendAttributedString: attachment];
	
// UIView附件 
UISwitch * switcher = [UISwitch new ];
[switcher sizeToFit ];
attachment = [ NSMutableAttributedString  yy_attachmentStringWithContent: switcher contentMode: UIViewContentModeBottom attachmentSize: switcher.size alignToFont: font alignment: YYTextVerticalAlignmentCenter];
[text appendAttributedString: attachment];
	
// CALayer附件 
CASharpLayer * layer = [CASharpLayer layer ];
layer.path = ...
attachment = [ NSMutableAttributedString  yy_attachmentStringWithContent: layer contentMode: UIViewContentModeBottom attachmentSize: switcher.size alignToFont: font alignment: YYTextVerticalAlignmentCenter];
[text appendAttributedString: attachment];

5.文本布局计算

NSAttributedString * text = ...
 CGSize size = CGSizeMake(100,CGFLOAT_MAX);
YYTextLayout * layout = [YYTextLayout layoutWithContainerSize: size text: text];
	
//获取文本边界 
layout.textBoundingRect; //获取边界rect 
layout.textBoundingSize; //获得边界大小
	
 //查询文本布局 
[布局 lineIndexForPoint:CGPointMake( 10, 10)];
[布局closestLineIndexForPoint:CGPointMake(10,10)];
[布局closestPositionToPoint:CGPointMake(10,10)];
[布局textRangeAtPoint:CGPointMake(10,10)];
[布局rectForRange: [YYTextRange rangeWithRange:NSMakeRange(10,2)]];
[布局selectionRectsForRange: [YYTextRange rangeWithRange:NSMakeRange(10,2)]];
	
//文本布局显示 
YYLabel * label = [YYLabel new ];
label.size = layout.textBoundingSize;
label.textLayout = layout;

6.调整文本行位置

//便捷方法:
// 1.创建文本行位置修饰符,实现`YYTextLinePositionModifier`协议。
// 2.将其设置为标签或文本视图。
	
YYTextLinePositionSimpleModifier * modifier = [YYTextLinePositionSimpleModifier new ];
modifier.fixedLineHeight = 24 ;
	
YYLabel * label = [YYLabel new ];
label.linePositionModifier = modifier;
	
//完全控制 
YYTextLinePositionSimpleModifier * modifier = [YYTextLinePositionSimpleModifier new ];
modifier.fixedLineHeight = 24 ;
	
YYTextContainer * container = [YYTextContainer new ];
container.size = CGSizeMake(100,CGFLOAT_MAX);
container.linePositionModifier = modifier;
	
YYTextLayout * layout = [YYTextLayout layoutWithContainer: container text: text];
YYLabel * label = [YYLabel new ];
label.size = layout.textBoundingSize;
label.textLayout = layout;

7.异步布局和渲染

//如果遇到性能问题,
//可以启用异步显示模式。
YYLabel * label = ...
label.displaysAsynchronously = YES ;
    
//如果你想获得最高的性能,你应该做的
//文本布局使用`在后台线程YYTextLayout`类。
YYLabel * label = [YYLabel new ];
label.displaysAsynchronously = YES ;
label.ignoreCommonProperties = YES ;
    
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^ {
    //创建属性字符串
   .NSMutableAttributedString * text = [[ NSMutableAttributedString  alloc ] initWithString:@“ Some Text ” ];
   文本。yy_font = [UIFont systemFontOfSize :16 ];
   文本。yy_color = [UIColor grayColor ];
   [文本yy_setColor: [的UIColor redColor ] 范围:NSMakeRange(0,4)];
 	
   //创建文本容器 
   YYTextContainer * container = [YYTextContainer new ];
   容器。size = CGSizeMake(100,CGFLOAT_MAX);
   容器。maximumNumberOfRows = 0 ;
   
   //生成文本布局。
   YYTextLayout * layout = [YYTextLayout layoutWithContainer: container text: text];
   
   dispatch_async(dispatch_get_main_queue(),^ {
       标签。size =布局。textBoundingSize ;
       标签。textLayout = layout;
   });
});

8.文本容器控件

YYLabel * label = ...
label.textContainerPath = [UIBezierPath bezierPathWith ...];
label.exclusionPaths = @ [[UIBezierPath bezierPathWith ...];,...];
label.textContainerInset = UIEdgeInsetsMake(...);
label.verticalForm = YES / NO ;
    
YYTextView * textView = ...
textView.exclusionPaths = @ [[UIBezierPath bezierPathWith ...];,...];
textView.textContainerInset = UIEdgeInsetsMake(...);
textView.verticalForm = YES / NO ;

9.文本解析器

// 1.创建文本解析器
	
YYTextSimpleEmoticonParser * parser = [YYTextSimpleEmoticonParser new ];
NSMutableDictionary * mapper = [ NSMutableDictionary  new ];
mapper [ @“:smile:” ] = [UIImage imageNamed:@“ smile.png ” ];
mapper [ @“:cool:” ] = [UIImage imageNamed:@“ cool.png ” ];
mapper [ @“:cry:” ] = [UIImage imageNamed:@“ cry.png ” ];
mapper [ @“:wink:” ] = [UIImage imageNamed:@“ wink.png ” ];
parser.emoticonMapper = mapper;
	
YYTextSimpleMarkdownParser * parser = [YYTextSimpleMarkdownParser new ];
[parser setColorWithDarkTheme ];
    
MyCustomParser * parser = ... //自定义解析器
    
// 2.将解析器附加到标签或文本视图
YYLabel * label = ...
label.textParser = parser;
    
YYTextView * textView = ...
textView.textParser = parser;

10.调试

//设置共享调试选项以显示文本布局结果。
YYTextDebugOption * debugOptions = [YYTextDebugOption new ];
debugOptions.baselineColor = [UIColor redColor ];
debugOptions.CTFrameBorderColor = [UIColor redColor ];
debugOptions.CTLineFillColor = [UIColor colorWithRed:0.000  绿色:0.463  蓝色:1.000  alpha:0.180 ];
debugOptions.CGGlyphBorderColor = [UIColor colorWithRed:1.000  green:0.524  blue:0.000  alpha:0.200 ];
[YYTextDebugOption setSharedDebugOption: debugOptions];

11.更多例子

有关Demo/YYTextDemo.xcodeproj更多示例,请参阅


 

 

以上就是YYText的用法学习,分享给大家共同学习,共同进步,最后如有错误,烦请小伙伴儿们指出,感激不尽~

 

你可能感兴趣的:(iOS,YYKit)