YYKit框架學(xué)習(xí)之YYLabel

一、YYLabel

強大的富文本顯示功能殖蚕,可根據(jù)文字的range隨意添加點擊事件

1 自動換行

YYLabel? *yyLabel = [YYLabel new];

yyLabel.numberOfLines = 0;

創(chuàng)建容器

YYTextContainer *titleContarer = [YYTextContainer new];

限制寬度

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

設(shè)置富文本

NSMutableAttributedString? *resultAttr = [self getAttr:title];

根據(jù)容器和文本創(chuàng)建布局對象

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

得到文本高度

CGFloat titleLabelHeight = titleLayout.textBoundingSize.height;

設(shè)置frame

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

2 各種格式設(shè)置

對齊方式 這里是 兩邊對齊

resultAttr.alignment = NSTextAlignmentCenter;

設(shè)置行間距

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"];

//文字描邊(空心字)默認(rèn)黑色睦疫,必須設(shè)置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];

}

設(shè)置邊框

{

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];

}

設(shè)置陰影

{

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];

// 點擊復(fù)制

[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:@"復(fù)制成功"];

}];

}

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這是最好的時代咕娄,這是最壞的時代;這是智慧的時代圣勒,這是愚蠢的時代;這是信仰的時期挚歧,這是懷疑的時期;這是光明的季節(jié)滑负,這是黑暗的季節(jié)用含;這是希望之春,這是失望之冬耕餐;人們面前有著各樣事物,人們面前一無所有;人們正在直登天堂哼转,人們正在直下地獄。\n點擊復(fù)制QQ450351763進行在線咨詢";

YYLabel??*yyLabel?=?[YYLabelnew];

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

//異步顯示

yyLabel.displaysAsynchronously=YES;

yyLabel.numberOfLines=0;

//創(chuàng)建容器

YYTextContainer*titleContarer?=?[YYTextContainernew];

//限制寬度

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

//設(shè)置富文本

NSMutableAttributedString??*resultAttr?=?[selfgetAttr:title];

//根據(jù)容器和文本創(chuàng)建布局對象

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

//得到文本高度

CGFloat?titleLabelHeight?=?titleLayout.textBoundingSize.height;

//設(shè)置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];

//????一趟妥、?格式設(shè)置

//對齊方式?這里是?兩邊對齊

resultAttr.alignment=?NSTextAlignmentCenter;

//設(shè)置行間距

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"];

//文字描邊(空心字)默認(rèn)黑色佣蓉,必須設(shè)置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];

}

//設(shè)置邊框

{

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];

}

//設(shè)置陰影

{

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];

//?點擊復(fù)制

[resultAttrsetTextHighlightRange:[attributedStringrangeOfString:@"450351763"]

color:[UIColorgreenColor]

backgroundColor:[UIColorwhiteColor]

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

UIPasteboard*pboard?=?[UIPasteboardgeneralPasteboard];

pboard.string=@"450351763";

[selfalertShow:@"復(fù)制成功"];

}];

}

//????圖文混排

{

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:^{

}];

});

}];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末基显,一起剝皮案震驚了整個濱河市善炫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌箩艺,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酱虎,死亡現(xiàn)場離奇詭異擂涛,居然都是意外死亡读串,警方通過查閱死者的電腦和手機撒妈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杰捂,“玉大人棋蚌,你說我怎么就攤上這事嫁佳」饶海” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵瓤漏,是天一觀的道長颊埃。 經(jīng)常有香客問我蔬充,道長班利,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任趾浅,我火速辦了婚禮,結(jié)果婚禮上皿哨,老公的妹妹穿的比我還像新娘。我一直安慰自己证膨,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布不见。 她就那樣靜靜地躺著崔步,像睡著了一般稳吮。 火紅的嫁衣襯著肌膚如雪井濒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天酪惭,我揣著相機與錄音者甲,去河邊找鬼春感。 笑死虏缸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的刽辙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼竟纳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缘挑,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤桶略,失蹤者是張志新(化名)和其女友劉穎诲宇,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姑蓝,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡吕粗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了颅筋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡占贫,死狀恐怖先口,靈堂內(nèi)的尸體忽然破棺而出型奥,到底是詐尸還是另有隱情池充,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布坑匠,位于F島的核電站,受9級特大地震影響厘灼,放射性物質(zhì)發(fā)生泄漏咽瓷。R本人自食惡果不足惜设凹,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一茅姜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奋姿,春花似錦、人聲如沸称诗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至撕予,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嗅蔬,已是汗流浹背疾就。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猬腰,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓姑荷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親添寺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容