你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS之富文本

iOS之富文本

編輯:IOS開發綜合
之前做項目時遇到一個問題:          使用UITextView顯示一段電影的簡介,由於字數比較多,所以字體設置的很小,行間距和段間距也很小,一大段文字擠在一起看起來很別扭,想要把行間距調大,結果在XCode中查遍其所有屬性才發現,UITextView居然沒有調整行間距的接口,於是忍住不心裡抱怨了一下下。          但是問題還是要解決的,上網一查才發現,iOS不僅有富文本處理的功能,而且對於文字排版的處理能力那是相當的強大,看來我是孤陋寡聞了。     正題開始之前插播一點基礎知識:     在iOS中或者Mac OS X中怎樣才能將一個字符串繪制到屏幕上呢?            簡單來說,是通過控件來完成的,而這些控件都封裝在UIKit框架中(對於Mac OS X是AppKit框架),在UIKit中常用來在屏幕上顯示字符串的控件有3個:           UILabel           UITextField           UITextView          然而這些控件本身對文本的展現方式很單一,通常僅僅能夠控制字體樣式、大小、顏色、加粗、斜體等等,而對於行距控制,字距控制,段落控制等高級功能卻無能為力。          此時不免要提起一個非常強大的文本排版框架CoreText.framework。        CoreText框架是基於 iOS 3.2+ 和 OSX 10.5+ 的一種能夠對文本格式和文本布局進行精細控制的文本引擎。它良好的結合了 UIKit 和 Core Graphics/Quartz:            UIKit 的 UILabel 允許你通過在 IB 中簡單的拖曳添加文本,但你不能改變文本的顏色和其中的單詞。        Core Graphics/Quartz幾乎允許你做任何系統允許的事情,但你需要為每個字形計算位置,並畫在屏幕上。            CoreText正結合了這兩者!你自己可以完全控制位置、布局、類似文本大小和顏色這樣的屬性,CoreText將幫你完善其它的東西——類似文本換行、字體呈現等等。            然而,CoreText.framework本身非常龐大,學習成本較高,使用起來也不是很方便,所以一般不是特殊需要,很少會有人去使用它。            隨著iOS6 API的發布,文字顯示的API越來越完善,其中一個重要的更新是在UITextField,UITextView和UILabel中加入了對AttributedString的支持,實現行距控制,字距控制,段落控制等高級功能也不必再去使用深奧的CoreText框架。            而iOS7的發布,蘋果又引入了TextKit,TextKit是一個快速而又現代化的文字排版和渲染引擎。          TextKit並沒有新增類,只是在原有的文本顯示控件上進行了封裝,可以在平時我們最喜歡使用的UILabel,UITextField,UITextView等控件裡面使用,其最主要的作用就是為程序提供文字排版和渲染的功能。        蘋果引入TextKit的目的並非要取代已有的CoreText框架,雖然CoreText的主要作用也是用於文字的排版和渲染,但它是一種先進而又處於底層技術,如果我們需要將文本內容直接渲染到圖形上下文(Graphics context)時,從性能和易用性來考慮,最佳方案就是使用CoreText。而如果我們需要直接利用蘋果提供的一些控件(如UITextView、UILabel和UITextField等)對文字進行排版,那麼借助於UIKit中TextKit提供的API無疑更為方便快捷。        TextKit在文字處理方面具有非常強大的功能,並且開發者可以對TextKit進行定制和擴展。據悉,蘋果利用了2年的時間來開發TextKit,相信這對許多開發者來說都是福音。          然而,無論CoreText還是TextKit都不在本文討論的范疇,因為它們都是非常龐大的體系,而我們的需求通過一個簡單小巧的AttributedString就可以輕松搞定,所以本文的關注點只有一個,那就是AttributedString,至於CoreText和TextKit,在真正需要的時候再進行深入研究和總結。       OK,啰嗦完畢,進入正題。            與NSString類似,在iOS中AttributedString也分為NSAttributedString和NSMutableAttributedString,不同的是,AttributedString對象多了一個Attribute的概念,一個AttributedString的對象包含很多的屬性,每一個屬性都有其對應的字符區域,在這裡是使用NSRange來進行描述的。       使用AttributedString的方式通常有兩種:   方式一:       首先初始化一個NSMutableAttributedString,然後向裡面添加文字樣式,最後將它賦給控件的AttributedText,該方法適合於文本較少而又需要分段精細控制的情況。     NSString *originStr = @"Hello,中秋節!";   //方式一   //創建 NSMutableAttributedString NSMutableAttributedString *attributedStr01 = [[NSMutableAttributedString alloc] initWithString: originStr];   //添加屬性   //給所有字符設置字體為Zapfino,字體高度為15像素 [attributedStr01 addAttribute: NSFontAttributeName value: [UIFont fontWithName: @"Zapfino" size: 15]                                                    range: NSMakeRange(0, originStr.length)]; //分段控制,最開始4個字符顏色設置成藍色 [attributedStr01 addAttribute: NSForegroundColorAttributeName value: [UIColor blueColor] range: NSMakeRange(0, 4)]; //分段控制,第5個字符開始的3個字符,即第5、6、7字符設置為紅色 [attributedStr01 addAttribute: NSForegroundColorAttributeName value: [UIColor redColor] range: NSMakeRange(4, 3)];   //賦值給顯示控件label01的 attributedText _label01.attributedText = attributedStr01;         方式二:         首先創建屬性字典,初始化各種屬性,然後和需要控制的文本一起創建並賦值給控件的AttributedText,該方法適合於需要控制的文本較多整體控制的情況,通常是從文件中讀取的大段文本控制。      //方式二   //創建屬性字典 NSDictionary *attrDict = @{ NSFontAttributeName: [UIFont fontWithName: @"Zapfino" size: 15],                             NSForegroundColorAttributeName: [UIColor blueColor] };   //創建 NSAttributedString 並賦值 _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict];                  通過對比兩個例子可以看出,方式一比較容易處理復雜的格式,但是屬性設置比較繁多復雜,而方式二的屬性設置比較簡單明了,卻不善於處理復雜多樣的格式控制,但是不善於並不等於不能,可以通過屬性字符串分段的方式來達到方式一的效果,如下:   //方式二的分段處理 //第一段 NSDictionary *attrDict1 = @{ NSFontAttributeName: [UIFont fontWithName: @"Zapfino" size: 15],                              NSForegroundColorAttributeName: [UIColor blueColor] }; NSAttributedString *attrStr1 = [[NSAttributedString alloc] initWithString: [originStr substringWithRange: NSMakeRange(0, 4)] attributes: attrDict1];   //第二段 NSDictionary *attrDict2 = @{ NSFontAttributeName: [UIFont fontWithName: @"Zapfino" size: 15],                              NSForegroundColorAttributeName: [UIColor redColor] }; NSAttributedString *attrStr2 = [[NSAttributedString alloc] initWithString: [originStr substringWithRange: NSMakeRange(4, 3)] attributes: attrDict2];   //第三段 NSDictionary *attrDict3 = @{ NSFontAttributeName: [UIFont fontWithName: @"Zapfino" size: 15],                              NSForegroundColorAttributeName: [UIColor blackColor] }; NSAttributedString *attrStr3 = [[NSAttributedString alloc] initWithString: [originStr substringWithRange:                                                                             NSMakeRange(7, originStr.length - 4 - 3)] attributes: attrDict3]; //合並 NSMutableAttributedString *attributedStr03 = [[NSMutableAttributedString alloc] initWithAttributedString: attrStr1]; [attributedStr03 appendAttributedString: attrStr2]; [attributedStr03 appendAttributedString: attrStr3];   _label03.attributedText = attributedStr03;                 好了,講完AttributedString的創建方式,下面研究下AttributedString究竟可以設置哪些屬性,具體來說,有以下21個:   // NSFontAttributeName                設置字體屬性,默認值:字體:Helvetica(Neue) 字號:12 // NSForegroundColorAttributeNam      設置字體顏色,取值為 UIColor對象,默認值為黑色 // NSBackgroundColorAttributeName     設置字體所在區域背景顏色,取值為 UIColor對象,默認值為nil, 透明色 // NSLigatureAttributeName            設置連體屬性,取值為NSNumber 對象(整數),0 表示沒有連體字符,1 表示使用默認的連體字符 // NSKernAttributeName                設定字符間距,取值為 NSNumber 對象(整數),正值間距加寬,負值間距變窄 // NSStrikethroughStyleAttributeName  設置刪除線,取值為 NSNumber 對象(整數) // NSStrikethroughColorAttributeName  設置刪除線顏色,取值為 UIColor 對象,默認值為黑色 // NSUnderlineStyleAttributeName      設置下劃線,取值為 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值,與刪除線類似 // NSUnderlineColorAttributeName      設置下劃線顏色,取值為 UIColor 對象,默認值為黑色 // NSStrokeWidthAttributeName         設置筆畫寬度,取值為 NSNumber 對象(整數),負值填充效果,正值中空效果 // NSStrokeColorAttributeName         填充部分顏色,不是字體顏色,取值為 UIColor 對象 // NSShadowAttributeName              設置陰影屬性,取值為 NSShadow 對象 // NSTextEffectAttributeName          設置文本特殊效果,取值為 NSString 對象,目前只有圖版印刷效果可用: // NSBaselineOffsetAttributeName      設置基線偏移值,取值為 NSNumber (float),正值上偏,負值下偏 // NSObliquenessAttributeName         設置字形傾斜度,取值為 NSNumber (float),正值右傾,負值左傾 // NSExpansionAttributeName           設置文本橫向拉伸屬性,取值為 NSNumber (float),正值橫向拉伸文本,負值橫向壓縮文本 // NSWritingDirectionAttributeName    設置文字書寫方向,從左向右書寫或者從右向左書寫 // NSVerticalGlyphFormAttributeName   設置文字排版方向,取值為 NSNumber 對象(整數),0 表示橫排文本,1 表示豎排文本 // NSLinkAttributeName                設置鏈接屬性,點擊後調用浏覽器打開指定URL地址 // NSAttachmentAttributeName          設置文本附件,取值為NSTextAttachment對象,常用於文字圖片混排 // NSParagraphStyleAttributeName      設置文本段落排版格式,取值為 NSParagraphStyle 對象      下面就一一舉例說明:   1. NSFontAttributeName     //NSForegroundColorAttributeName 設置字體顏色,取值為 UIColor,默認為黑色   NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] }; NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] }; NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1]; _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2]; _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];       注意:          NSForegroundColorAttributeName設置的顏色與UILabel的textColor屬性設置的顏色在地位上是相等的,誰最後賦值,最終顯示的就是誰的顏色。       2. NSBackgroundColorAttributeName     //NSForegroundColorAttributeName 設置字體顏色,取值為 UIColor,默認為黑色   NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] }; NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] }; NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1]; _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2]; _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];     //NSBackgroundColorAttributeName 設置字體所在區域背景的顏色,取值為UIColor,默認值為nil   NSDictionary *attrDict4 = @{ NSBackgroundColorAttributeName: [UIColor orangeColor] }; NSDictionary *attrDict5 = @{ NSBackgroundColorAttributeName: [UIColor redColor] }; NSDictionary *attrDict6 = @{ NSBackgroundColorAttributeName: [UIColor cyanColor] };   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict4]; _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict5]; _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict6];                仔細觀察會發現個問題,我並沒有關閉 NSForegroundColorAttributeName 屬性,但是在運行結果中,所有字體的顏色都變成了默認色——黑色,這說明 NSForegroundColorAttributeName 和 NSBackgroundColorAttributeName 的低位是相等的,跟前面介紹的 textColor 一樣,哪個屬性最後一次賦值,就會沖掉前面的效果,若是我們把屬性代碼順序交換一下     //NSBackgroundColorAttributeName 設置字體所在區域背景的顏色,取值為UIColor,默認值為nil   NSDictionary *attrDict4 = @{ NSBackgroundColorAttributeName: [UIColor orangeColor] }; NSDictionary *attrDict5 = @{ NSBackgroundColorAttributeName: [UIColor redColor] }; NSDictionary *attrDict6 = @{ NSBackgroundColorAttributeName: [UIColor cyanColor] };   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict4]; _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict5]; _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict6];   //NSForegroundColorAttributeName 設置字體顏色,取值為 UIColor,默認為黑色   NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] }; NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] }; NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1]; _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2]; _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];         但是textColor屬性可以與 NSBackgroundColorAttributeName 屬性疊加     _label01.textColor = [UIColor greenColor]; _label02.textColor = [UIColor yellowColor]; _label03.textColor = [UIColor blueColor];   //NSForegroundColorAttributeName 設置字體顏色,取值為 UIColor,默認為黑色   NSDictionary *attrDict1 = @{ NSForegroundColorAttributeName: [UIColor redColor] }; NSDictionary *attrDict2 = @{ NSForegroundColorAttributeName: [UIColor blueColor] }; NSDictionary *attrDict3 = @{ NSForegroundColorAttributeName: [UIColor orangeColor] };   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1]; _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2]; _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];     //NSBackgroundColorAttributeName 設置字體所在區域背景的顏色,取值為UIColor,默認值為nil   NSDictionary *attrDict4 = @{ NSBackgroundColorAttributeName: [UIColor orangeColor] }; NSDictionary *attrDict5 = @{ NSBackgroundColorAttributeName: [UIColor redColor] }; NSDictionary *attrDict6 = @{ NSBackgroundColorAttributeName: [UIColor cyanColor] };   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict4]; _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict5]; _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict6];              雖然 textColor 在 NSFontAttributeName 之前賦值,但是由於 NSFontAttributeName 的屬性效果被NSBackgroundColorAttributeName 屬性沖掉了,所以最終顯示了 textColor 的顏色。       3. NSLigatureAttributeName   //NSLigatureAttributeName 設置連體屬性,取值為NSNumber 對象(整數),0 表示沒有連體字符,1 表示使用默認的連體字符, //                        2 表示使用所有連體符號,默認值為 1(iOS 不支持 2)   NSString *ligatureStr = @"flush";   NSDictionary *attrDict1 = @{ NSLigatureAttributeName: [NSNumber numberWithInt: 0],                              NSFontAttributeName: [UIFont fontWithName: @"futura" size: 30] }; _label01.attributedText = [[NSAttributedString alloc] initWithString: ligatureStr attributes: attrDict1];   NSDictionary *attrDict2 = @{ NSLigatureAttributeName: @(1),                              NSFontAttributeName: [UIFont fontWithName: @"futura" size: 30]                               }; _label02.attributedText = [[NSAttributedString alloc] initWithString: ligatureStr attributes: attrDict2];        由於要展示連體字符,所以將前面使用的帶有中文的字符串換成 flush          NSLigatureAttributeName的取值為NSNumber對象,所以不能直接將一個整數值賦給它,創建 NSNumber 對象的方法有很多,或者可以簡寫成 @(int)                  注意觀察字母f和l之間的變化。          感覺連寫就是一個藝術字功能,當字符f和l組合使用組合符號(所謂的字形(glyph))繪制時,看起來確實更加美觀。但是並非所有的字符之間都有組合符號,事實上,只有某些字體中得某些字符的組合(如字符f和l,字符f和i等)才具有美觀的組合符號。       4. NSKernAttributeName     //NSKernAttributeName 設定字符間距,取值為 NSNumber 對象(整數),正值間距加寬,負值間距變窄           NSDictionary *attrDict1 = @{ NSKernAttributeName: @(-3),                                NSFontAttributeName: [UIFont systemFontOfSize: 20]                                };   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];           NSDictionary *attrDict2 = @{ NSKernAttributeName: @(0),                                NSFontAttributeName: [UIFont systemFontOfSize: 20]                                };   _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];           NSDictionary *attrDict3 = @{ NSKernAttributeName: @(10),                                NSFontAttributeName: [UIFont systemFontOfSize: 20]                                };   _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];             5. NSStrikethroughStyleAttributeName     //NSStrikethroughStyleAttributeName 設置刪除線,取值為 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值 // NSUnderlineStyleNone   不設置刪除線 // NSUnderlineStyleSingle 設置刪除線為細單實線 // NSUnderlineStyleThick  設置刪除線為粗單實線 // NSUnderlineStyleDouble 設置刪除線為細雙實線     NSDictionary *attrDict1 = @{ NSStrikethroughStyleAttributeName: @(NSUnderlineStyleSingle),                              NSFontAttributeName: [UIFont systemFontOfSize:20] }; _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];     NSDictionary *attrDict2 = @{ NSStrikethroughStyleAttributeName: @(NSUnderlineStyleThick),                              NSFontAttributeName: [UIFont systemFontOfSize:20] }; _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];     NSDictionary *attrDict3 = @{ NSStrikethroughStyleAttributeName: @(NSUnderlineStyleDouble),                              NSFontAttributeName: [UIFont systemFontOfSize:20] }; _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3]; 注意:          雖然使用了枚舉常量,但是枚舉常量的本質仍為整數,所以同樣必須先轉化為 NSNumber 才能使用          刪除線和下劃線使用相同的枚舉常量作為其屬性值          目前iOS中只有上面列出的4中效果,雖然我們能夠在頭文件中發現其他更多的取值,但是使用後沒有任何效果             可以看出,中文和英文刪除線的位置有所不同          另外,刪除線屬性取值除了上面的4種外,其實還可以取其他整數值,有興趣的可以自行試驗,取值為 0 - 7時,效果為單實線,隨著值得增加,單實線逐漸變粗,取值為 9 - 15時,效果為雙實線,取值越大,雙實線越粗。   NSDictionary *attrDict1 = @{ NSStrikethroughStyleAttributeName: @(1),                              NSFontAttributeName: [UIFont systemFontOfSize:20] }; _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];     NSDictionary *attrDict2 = @{ NSStrikethroughStyleAttributeName: @(3),                              NSFontAttributeName: [UIFont systemFontOfSize:20] }; _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];     NSDictionary *attrDict3 = @{ NSStrikethroughStyleAttributeName: @(7),                              NSFontAttributeName: [UIFont systemFontOfSize:20] }; _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];           6. NSStrikethroughColorAttributeName     //NSStrikethroughColorAttributeName 設置刪除線顏色,取值為 UIColor 對象,默認值為黑色       NSDictionary *attrDict1 = @{ NSStrikethroughColorAttributeName: [UIColor blueColor],                                NSStrikethroughStyleAttributeName: @(1),                                NSFontAttributeName: [UIFont systemFontOfSize:20] };   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];           NSDictionary *attrDict2 = @{ NSStrikethroughColorAttributeName: [UIColor orangeColor],                                NSStrikethroughStyleAttributeName: @(3),                                NSFontAttributeName: [UIFont systemFontOfSize:20] };   _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];           NSDictionary *attrDict3 = @{ NSStrikethroughColorAttributeName: [UIColor greenColor],                                NSStrikethroughStyleAttributeName: @(7),                                NSFontAttributeName: [UIFont systemFontOfSize:20] };   _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];             7. NSUnderlineStyleAttributeName       下劃線除了線條位置和刪除線不同外,其他的都可以完全參照刪除線設置。     //NSUnderlineStyleAttributeName 設置下劃線,取值為 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值,與刪除線類似   NSDictionary *attrDict1 = @{ NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle),                              NSFontAttributeName: [UIFont systemFontOfSize:20] }; _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];     NSDictionary *attrDict2 = @{ NSUnderlineStyleAttributeName: @(NSUnderlineStyleThick),                              NSFontAttributeName: [UIFont systemFontOfSize:20] }; _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];     NSDictionary *attrDict3 = @{ NSUnderlineStyleAttributeName: @(NSUnderlineStyleDouble),                              NSFontAttributeName: [UIFont systemFontOfSize:20] }; _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];           8. NSUnderlineColorAttributeName       可以完全參照下劃線顏色設置     //NSUnderlineColorAttributeName 設置下劃線顏色,取值為 UIColor 對象,默認值為黑色         NSDictionary *attrDict1 = @{ NSUnderlineColorAttributeName: [UIColor blueColor],                                 NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle),                                 NSFontAttributeName: [UIFont systemFontOfSize:20] };    _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];              NSDictionary *attrDict2 = @{ NSUnderlineColorAttributeName: [UIColor orangeColor],                                 NSUnderlineStyleAttributeName: @(NSUnderlineStyleThick),                                 NSFontAttributeName: [UIFont systemFontOfSize:20] };    _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];              NSDictionary *attrDict3 = @{ NSUnderlineColorAttributeName: [UIColor greenColor],                                 NSUnderlineStyleAttributeName: @(NSUnderlineStyleDouble),                                 NSFontAttributeName: [UIFont systemFontOfSize:20] };    _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];             9. NSStrokeWidthAttributeName     //NSStrokeWidthAttributeName 設置筆畫寬度,取值為 NSNumber 對象(整數),負值填充效果,正值中空效果       NSDictionary *attrDict1 = @{ NSStrokeWidthAttributeName: @(-3),                                NSFontAttributeName: [UIFont systemFontOfSize:30] };   _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];           NSDictionary *attrDict2 = @{ NSStrokeWidthAttributeName: @(0),                                NSFontAttributeName: [UIFont systemFontOfSize:30] };   _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];           NSDictionary *attrDict3 = @{ NSStrokeWidthAttributeName: @(3),                                NSFontAttributeName: [UIFont systemFontOfSize:30] };   _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];             10. NSStrokeColorAttributeName     //NSStrokeColorAttributeName 填充部分顏色,不是字體顏色,取值為 UIColor 對象         NSDictionary *attrDict1 = @{ NSStrokeWidthAttributeName: @(-3),                                 NSStrokeColorAttributeName: [UIColor orangeColor],                                 NSFontAttributeName: [UIFont systemFontOfSize:30] };    _label01.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];              NSDictionary *attrDict2 = @{ NSStrokeWidthAttributeName: @(0),                                 NSStrokeColorAttributeName: [UIColor blueColor],                                 NSFontAttributeName: [UIFont systemFontOfSize:30] };    _label02.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict2];              NSDictionary *attrDict3 = @{ NSStrokeWidthAttributeName: @(3),                                 NSStrokeColorAttributeName: [UIColor greenColor],                                 NSFontAttributeName: [UIFont systemFontOfSize:30] };    _label03.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict3];
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved