快速掌握YYText

在開發(fā)中我們經(jīng)常會需要用到富文本,如果每次使用都去創(chuàng)建設(shè)置的話比較繁瑣,這個時候一個好的框架能幫我們省去不少時間.YYText 就是一個使用比較成熟的框架,現(xiàn)在我們就開始學(xué)習(xí)YYText.

安裝

UIKit
CoreFoundation
CoreText
QuartzCore
Accelerate
MobileCoreServices

內(nèi)容

9.png

打開YYText.h

#import <YYText/YYLabel.h>
#import <YYText/YYTextView.h>
#import <YYText/YYTextAttribute.h>
#import <YYText/YYTextArchiver.h>
#import <YYText/YYTextParser.h>
#import <YYText/YYTextRunDelegate.h>
#import <YYText/YYTextRubyAnnotation.h>
#import <YYText/YYTextLayout.h>
#import <YYText/YYTextLine.h>
#import <YYText/YYTextInput.h>
#import <YYText/YYTextDebugOption.h>
#import <YYText/YYTextKeyboardManager.h>
#import <YYText/YYTextUtilities.h>
#import <YYText/NSAttributedString+YYText.h>
#import <YYText/NSParagraphStyle+YYText.h>
#import <YYText/UIPasteboard+YYText.h>

我們主要用到的都在YYLabel 和YYTextView
二者用法類似 我們主要研究YYLabel

@interface YYLabel : UIView <NSCoding>
@property (nullable, nonatomic, copy) IBInspectable NSString *text;
@property (null_resettable, nonatomic, strong) IBInspectable UIColor *textColor;
@property (nullable, nonatomic, strong) IBInspectable NSString *fontName_;
@property (nonatomic) IBInspectable CGFloat fontSize_;
@property (nonatomic) IBInspectable BOOL fontIsBold_;
@property (nonatomic) IBInspectable NSUInteger numberOfLines;
@property (nonatomic) IBInspectable NSInteger lineBreakMode;
@property (nonatomic) IBInspectable CGFloat preferredMaxLayoutWidth;
@property (nonatomic, getter=isVerticalForm) IBInspectable BOOL verticalForm;
@property (nonatomic) IBInspectable NSInteger textAlignment;
@property (nonatomic) IBInspectable NSInteger textVerticalAlignment;
@property (nullable, nonatomic, strong) IBInspectable UIColor *shadowColor;
@property (nonatomic) IBInspectable CGPoint shadowOffset;
@property (nonatomic) IBInspectable CGFloat shadowBlurRadius;
@property (nullable, nonatomic, copy) IBInspectable NSAttributedString *attributedText;
@property (nonatomic) IBInspectable CGFloat insetTop_;
@property (nonatomic) IBInspectable CGFloat insetBottom_;
@property (nonatomic) IBInspectable CGFloat insetLeft_;
@property (nonatomic) IBInspectable CGFloat insetRight_;
@property (nonatomic) IBInspectable BOOL debugEnabled_;

@property (null_resettable, nonatomic, strong) UIFont *font;
@property (nullable, nonatomic, copy) NSAttributedString *truncationToken;
@property (nullable, nonatomic, strong) id<YYTextParser> textParser;
@property (nullable, nonatomic, strong) YYTextLayout *textLayout;
@property (nullable, nonatomic, copy) UIBezierPath *textContainerPath;
@property (nullable, nonatomic, copy) NSArray<UIBezierPath*> *exclusionPaths;
@property (nonatomic) UIEdgeInsets textContainerInset;
@property (nullable, nonatomic, copy) id<YYTextLinePositionModifier> linePositionModifier;
@property (nonnull, nonatomic, copy) YYTextDebugOption *debugOption;
@property (nullable, nonatomic, copy) YYTextAction textTapAction;
@property (nullable, nonatomic, copy) YYTextAction textLongPressAction;
@property (nullable, nonatomic, copy) YYTextAction highlightTapAction;
@property (nullable, nonatomic, copy) YYTextAction highlightLongPressAction;
@property (nonatomic) BOOL displaysAsynchronously;
@property (nonatomic) BOOL clearContentsBeforeAsynchronouslyDisplay;
@property (nonatomic) BOOL fadeOnAsynchronouslyDisplay;
@property (nonatomic) BOOL fadeOnHighlight;
@property (nonatomic) BOOL ignoreCommonProperties;
@end

叢類里面我們可以看到聲明了各種屬性,通過設(shè)置不同的屬性達到要求,這個具體問題的時候我們講解.

使用和測試

  • 1 基本用法
YYLabel *label = [YYLabel new];
label.frame = ...
label.font = ...
label.textColor = ...
label.textAlignment = ...
label.lineBreakMode = ...
label.numberOfLines = ...
label.text = ...
  • 2 屬性文本
    先上代碼
#import <YYText/YYText.h>

NSString* YuJian=  @"聽見 冬天的離開  我在某年某月醒過來  我想我等我期待 未來卻不能理智安排 -- 陰天 傍晚車窗外 未來有一個人在等待 向左向右向前看  愛要拐幾個彎才來 我遇見誰會有怎樣的對白  我等的人他在多遠的未來  我聽見風(fēng)來自地鐵和人海 我排著隊拿著愛的號碼牌 我往前飛飛過一片時間海 我們也常在愛情里受傷害 我遇見誰會有怎樣的對白  我等的人他在多遠的未來  我聽見風(fēng)來自地鐵和人海 我排著隊拿著愛的號碼牌 我往前飛飛過一片時間海 我們也常在愛情里受傷害 我看著路夢的入口有點窄 我遇見你是最美麗的意外 @終有一天我的謎底會揭開";
#define kScreenHeight [UIScreen mainScreen].bounds.size.height

#define kScreenWidth [UIScreen mainScreen].bounds.size.width

文字屬性

/**
 文字屬性
 */
-(void)test1
{
    
    YYLabel* label=[[YYLabel alloc]initWithFrame:CGRectMake(30, 50, kScreenWidth-60, kScreenHeight-100)];
    [self.view addSubview:label];
    label.numberOfLines=0;
    
    NSMutableAttributedString* atext=[[NSMutableAttributedString alloc]initWithString:YuJian];
    //設(shè)置字體大小
    [atext yy_setFont:[UIFont systemFontOfSize:20] range:atext.yy_rangeOfAll];
    
    //局部不同顏色
    NSRange range0=[[atext string]rangeOfString:@"冬天的離開"];
    [atext yy_setColor:[UIColor blueColor] range:range0];
    //設(shè)置行間距
    atext.yy_lineSpacing=10;
    
    //設(shè)置下劃線
    NSRange range1=[[atext string]rangeOfString:@"我等的人" ];
    YYTextDecoration* deco=[YYTextDecoration decorationWithStyle:(YYTextLineStyleSingle) width:[NSNumber numberWithInt:1] color:[UIColor redColor]];
    [atext yy_setTextUnderline:deco range:range1];
    
    //陰影
    
    NSRange range2=[[atext string]rangeOfString:@"傍晚車窗外" options:(nil)];
    NSShadow*  shadow=[[NSShadow alloc]init];
    [shadow setShadowColor:[UIColor redColor]];
    [shadow setShadowBlurRadius:1];
    [shadow setShadowOffset:CGSizeMake(2, 2)];
    [atext yy_setShadow:shadow range:range2];
    //文本內(nèi)陰影
    NSRange range3=[[atext string]rangeOfString:@"我在某年某月醒過來"];
    YYTextShadow* dow=[YYTextShadow new];
    dow.color=[UIColor yellowColor];
    dow.offset=CGSizeMake(0, 2);
    dow.radius=1;
               
    [atext yy_setTextShadow:dow range:range3];
    
    label.attributedText=atext;
    
    
    
    
}

效果

5D58A48D-E994-42C6-9B32-922F8249DF8E.png

高亮和點擊事件

//高亮文本和點擊事件
-(void)test2
{
    YYLabel* label=[[YYLabel alloc]initWithFrame:CGRectMake(30, 50, kScreenWidth-60, kScreenHeight-100)];
    [self.view addSubview:label];
    label.numberOfLines=0;
    
    NSMutableAttributedString* atext=[[NSMutableAttributedString alloc]initWithString:YuJian];
    //設(shè)置字體大小
    [atext yy_setFont:[UIFont systemFontOfSize:20] range:atext.yy_rangeOfAll];
    NSRange range4=[[atext string] rangeOfString:@"向左向右向前看"];
    [atext yy_setTextHighlightRange:range4 color:[UIColor redColor] backgroundColor:[UIColor grayColor] tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
        NSString* str=text.string;
       
        NSLog(@"你點擊了 %@ ---range %ld", [str substringWithRange:range] ,range.length);
        
    }];
    
    
  
    
    
    label.attributedText=atext;
    
}

效果

57E94F5E-8FE4-4F57-B1E9-1942AB8745BC.png
E8B95751-DAF1-4BBA-9BDC-FFD842B39009.png

簡單的用法就是這些了,YYText很強大,還有圖文混排等高大上的功能,等樓主抽空再研究講解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市敞贡,隨后出現(xiàn)的幾起案子钞螟,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件负甸,死亡現(xiàn)場離奇詭異虹蓄,居然都是意外死亡,警方通過查閱死者的電腦和手機斜姥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門鸿竖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沧竟,“玉大人,你說我怎么就攤上這事缚忧∥虮茫” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵闪水,是天一觀的道長糕非。 經(jīng)常有香客問我,道長球榆,這世上最難降的妖魔是什么朽肥? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮持钉,結(jié)果婚禮上衡招,老公的妹妹穿的比我還像新娘。我一直安慰自己每强,他們只是感情好始腾,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著空执,像睡著了一般浪箭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辨绊,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天奶栖,我揣著相機與錄音,去河邊找鬼门坷。 笑死宣鄙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拜鹤。 我是一名探鬼主播框冀,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼敏簿!你這毒婦竟也來了明也?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤惯裕,失蹤者是張志新(化名)和其女友劉穎温数,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜻势,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡撑刺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了握玛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片够傍。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡甫菠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出冕屯,到底是詐尸還是另有隱情寂诱,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布安聘,位于F島的核電站痰洒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏浴韭。R本人自食惡果不足惜丘喻,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望念颈。 院中可真熱鬧泉粉,春花似錦、人聲如沸舍肠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翠语。三九已至,卻和暖如春财边,著一層夾襖步出監(jiān)牢的瞬間肌括,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工酣难, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谍夭,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓憨募,卻偏偏與公主長得像紧索,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子菜谣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

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