原文:http://developer.apple.com/library/ios/#documentation/uikit/reference/NSAttributedString_UIKit_Additions/RevisionHistory.html
概述
UIKit 在 NSAttributedString 中加入了新的方法,以支援格式化文本的繪製、計算文本在繪製前的大小及空間。這些方法不影響文本的內容,隻影響繪製的過程。
預設,文本繪製使用本地座標,內容從某個點向右向下繪製。當你放置常值內容時,記住文字區塊的左上方就是繪製的起點。
你可以在主線程之外使用這些方法,但是,如果是支援NSStringDrawingContext 的任何方法,則無法跨過線程或 dispatch queue 共用 NSStringDrawiingContext。
執行個體方法
繪製文本
- – drawAtPoint:
- – drawInRect:
- – drawWithRect:options:context:
計算文本的空間
- – size
- – boundingRectWithSize:options:context:
執行個體方法
boundingRectWithSize:options:context:
返迴文本繪製所佔據的矩形空間。
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context
參數
size
寬高限制,用於計算文本繪製時佔據的矩形塊。
Thewidth and height constraints to apply when computing the string’s boundingrectangle.
options
文本繪製時的附加選項。可能取值請參考“NSStringDrawingOptions”。
context
context上下文。包括一些資訊,例如如何調整字間距以及縮放。最終,該對象包含的資訊將用於文本繪製。該參數可為 nil 。
傳回值
一個矩形,大小等於文本繪製完將佔據的寬和高。
討論
可以使用該方法計算文本繪製所需的空間。size 參數是一個constraint ,用於在繪製文本時作為參考。但是,如果繪製完整個文本需要更大的空間,則返回的矩形大小可能比 size 更大。一般,繪製時會採用constraint 提供的寬度,但高度則會根據需要而定。
特殊情況
為了計算文字區塊的大小,該方法採用預設基準。
如果 NSStringDrawingUsesLineFragmentOrigin未指定,矩形的高度將被忽略,同時使用單線繪製。(由於一個 bug,在 iOS6 中,寬度會被忽略)
相容性
聲明於
NSStringDrawing.h
drawAtPoint:
從指定點(當前圖形上下文)開始繪製文本。
- (void)drawAtPoint:(CGPoint)point
參數
point
當前圖形上下文中的點,文本將從此開始繪製。該圖形內容相關的座標系通常由當前正在繪製的視圖定義。
討論
該方法從某個點開始繪製整個文本。該方法根據 attributedstring 的屬性來繪製行。如果文本中出現分行符號,將進行換行,後續的文本將被放到下一行的最初位置。
相容性
聲明於
NSStringDrawing.h
drawInRect:
在當前圖形內容相關的指定矩形內繪製文本。
- (void)drawInRect:(CGRect)rect
參數
rect
指定繪製文本的矩形範圍。
討論
該方法在指定矩形內繪製儘可能多的常值內容,必要時會壓縮字元。如果對於該矩形來說,常值內容太長,該方法繪製儘可能多的內容,剩餘內容將被剪下。該方法用 attributed string 的屬性來繪製行。如果文本中出現分行符號,將進行換行,後續的文本將被放到下一行的最初位置。
相容性
- Available in iOS 6.0 and later.
Declared In
NSStringDrawing.h
drawWithRect:options:context:
用提供的選項將文本繪製到指定的矩形分為內。
- (void)drawWithRect:(CGRect)rect options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context
參數
rect
指定在某個矩形中繪製文本。
options
文本繪製選項。可能取值請參考“NSStringDrawingOptions”。
context
內容物件,用於包含資訊:如何調整字間距以及縮放。最終,該對象包含的資訊將用於文本繪製。該參數可為 nil。
討論
該方法在指定矩形內繪製儘可能多的常值內容,必要時會對字元進行壓縮。如果矩形內要繪製的常值內容太長,該方法將根據需要縮放字型,或者調整字元間距。
該方法用 attributed string 的屬性來繪製行。如果文本中出現分行符號,將進行換行,後續的文本將被放到下一行的最初位置。
特殊情況
該方法採用預設基準。
如果NSStringDrawingUsesLineFragmentOrigin 未指定,矩形的高度將被忽略,同時使用單線繪製。(由於一個 bug,在 iOS6 中,寬度會被忽略)
相容性
聲明於
NSStringDrawing.h
size
返迴文本繪製所需 size。
Returns the sizerequired to draw the string.
- (CGSize)size
傳回值
繪製完整文本所需的最小 size。
討論
可以用該方法在繪製之前計算需要多大空間。
相容性
聲明於
NSStringDrawing.h
常量
NSStringDrawingOptions
文本繪製選項。
enum {
NSStringDrawingTruncatesLastVisibleLine= 1 << 5,
NSStringDrawingUsesLineFragmentOrigin= 1 << 0,
NSStringDrawingUsesFontLeading= 1 << 1,
NSStringDrawingUsesDeviceMetrics= 1 << 3,
};
typedef NSInteger NSStringDrawingOptions;
常量
NSStringDrawingTruncatesLastVisibleLine
如果常值內容超出指定的矩形限制,文本將被截去並在最後一個字元後加上省略符號。如果指定了NSStringDrawingUsesLineFragmentOrigin選項,則該選項被忽略。
NSStringDrawingUsesLineFragmentOrigin
繪製文本時使用 line fragement origin 而不是 baseline origin。
Theorigin specified when drawing the string is the line fragment origin and notthe baseline origin.
NSStringDrawingUsesFontLeading
計算行高時使用行間距。(譯者註:字型大小+行間距=行高)
NSStringDrawingUsesDeviceMetrics
計算布局時使用圖元字形(而不是印刷字型)。
Usethe image glyph bounds (instead of the typographic bounds) when computinglayout.
劃線樣式屬性
指定底線或刪除線樣式。
enum {
NSUnderlineStyleNone = 0x00,
NSUnderlineStyleSingle= 0x01,
};
常量
NSUnderlineStyleNone
不劃線。
NSUnderlineStyleSingle
單線
討論
可以在屬性字串的 NSUnderlineStyleAttributeName和NSStrikethroughStyleAttributeName屬性上使用這些常量。
字元屬性
字元屬性可以應用於 attributed string 的文本中。
NSString *const NSFontAttributeName;
NSString *const NSParagraphStyleAttributeName;
NSString *const NSForegroundColorAttributeName;
NSString *const NSBackgroundColorAttributeName;
NSString *const NSLigatureAttributeName;
NSString *const NSKernAttributeName;
NSString *const NSStrikethroughStyleAttributeName;
NSString *const NSUnderlineStyleAttributeName;
NSString *const NSStrokeColorAttributeName;
NSString *const NSStrokeWidthAttributeName;
NSString *const NSShadowAttributeName;
NSString *const NSVerticalGlyphFormAttributeName;
常量
NSFontAttributeName
該屬性所對應的值是一個 UIFont 對象。該屬性用於改變一段文本的字型。如果不指定該屬性,則預設為12-point Helvetica(Neue)。
NSParagraphStyleAttributeName
該屬性所對應的值是一個 NSParagraphStyle 對象。該屬性在一段文本上應用多個屬性。如果不指定該屬性,則預設為 NSParagraphStyle 的defaultParagraphStyle 方法返回的預設段落屬性。
NSForegroundColorAttributeName
該屬性所對應的值是一個 UIColor 對象。該屬性用於指定一段文本的字型顏色。如果不指定該屬性,則預設為黑色。
NSBackgroundColorAttributeName
該屬性所對應的值是一個 UIColor 對象。該屬性用於指定一段文本的背景顏色。如果不指定該屬性,則預設無背景色。
NSLigatureAttributeName
該屬性所對應的值是一個 NSNumber 對象(整數)。連體字元是指某些連在一起的字元,它們採用單個的圖元符號。0 表示沒有連體字元。1 表示使用預設的連體字元。2表示使用所有連體符號。預設值為 1(注意,iOS 不支援值為 2)。
NSKernAttributeName
該屬性所對應的值是一個 NSNumber 對象(整數)。字母緊排指定了用於調整字距的像素點數。字母緊排的效果依賴於字型。值為 0 表示不使用字母緊排。預設值為0。
NSStrikethroughStyleAttributeName
該屬性所對應的值是一個 NSNumber 對象(整數)。該值指定是否在文字上加上刪除線,該值參考“Underline Style Attributes”。預設值是NSUnderlineStyleNone。
NSUnderlineStyleAttributeName
該屬性所對應的值是一個 NSNumber 對象(整數)。該值指定是否在文字上加上底線,該值參考“Underline Style Attributes”。預設值是NSUnderlineStyleNone。
NSStrokeColorAttributeName
該屬性所對應的值是一個 UIColor 對象。如果該屬性不指定(預設),則等同於 NSForegroundColorAttributeName。否則,指定為刪除線或底線顏色。更多細節見“Drawing attributedstrings that are both filled and stroked”。
NSStrokeWidthAttributeName
該屬性所對應的值是一個 NSNumber 對象(小數)。該值改變描邊寬度(相對於字型size 的百分比)。預設為 0,即不改變。正數只改變描邊寬度。負數同時改變文字的描邊和填充寬度。例如,對於常見的空心字,這個值通常為3.0。
NSShadowAttributeName
該屬性所對應的值是一個 NSShadow 對象。預設為 nil。
NSVerticalGlyphFormAttributeName
該屬性所對應的值是一個 NSNumber 對象(整數)。0 表示橫排文本。1 表示豎排文本。在 iOS 中,總是使用橫排文本,0 以外的值都未定義。