標籤:leading 移動 fine pos oid 常量 常用文法 nbsp 相對
CoreText的關鍵文法
一、座標旋轉
-(void)drawRect:(CGRect)rect{ //擷取上下文 CGContextRef ctx = UIGraphicsGetCurrentContext(); //在上下文中,建立一個標準座標系 CGContextSetTextMatrix(ctx, CGAffineTransformIdentity); //將上下文中的原點,進行平行移動,下面是沿著y軸方向移動,從而轉換成螢幕座標系 CGContextTranslateCTM(ctx, 0, self.bounds.size.height); //翻轉y軸正方 CGContextScaleCTM(ctx, 1.0, -1.0); //繪製尺寸(stringModel是字串模型,通過它提前算好了繪製尺寸),直接進行繪製 CTFrameRef ctFrame = self.stringModel.ctFrame; CTFrameDraw(ctFrame, ctx);}
二、主要鍵名
//1、設定字型屬性,預設值:字型:Helvetica(Neue) 字型大小:12NSFontAttributeName //2、設定字型顏色,取值為 UIColor對象,預設值為黑色 NSForegroundColorAttributeName //3、設定字型所在地區背景顏色,取值為 UIColor對象,預設值為nil, 透明色NSBackgroundColorAttributeName //4、設定連體屬性,取值為NSNumber 對象(整數),0 表示沒有連體字元,1 表示使用預設的連體字元NSLigatureAttributeName //5、設定字元間距,取值為 NSNumber 對象(整數),正值間距加寬,負值間距變窄NSKernAttributeName //6、設定刪除線,取值為 NSNumber 對象(整數)NSStrikethroughStyleAttributeName //7、設定刪除線顏色,取值為 UIColor 對象,預設值為黑色NSStrikethroughColorAttributeName //8、設定底線,取值為 NSNumber 對象(整數),枚舉常量 NSUnderlineStyle中的值,與刪除線類似NSUnderlineStyleAttributeName //9、設定底線顏色,取值為 UIColor 對象,預設值為黑色NSUnderlineColorAttributeName //10、設定筆畫寬度,取值為 NSNumber 對象(整數),負值填充效果,正值中空效果NSStrokeWidthAttributeName //11、填充部分顏色,不是字型顏色,取值為 UIColor 對象NSStrokeColorAttributeName //12、設定陰影屬性,取值為 NSShadow 對象NSShadowAttributeName //13、設定文本特殊效果,取值為 NSString 對象,目前只有圖版印刷效果可用NSTextEffectAttributeName //14、設定基準位移值,取值為 NSNumber (float),正值上偏,負值下偏NSBaselineOffsetAttributeName //15、設定字形傾斜度,取值為 NSNumber (float),正值右傾,負值左傾NSObliquenessAttributeName //16、設定文本橫向展開屬性,取值為 NSNumber (float),正值橫向展開文本,負值橫向壓縮文本NSExpansionAttributeName //17、設定文字書寫方向,從左向右書寫或者從右向左書寫NSWritingDirectionAttributeName //18、設定文字排版方向,取值為 NSNumber 對象(整數),0 表示橫排文本,1 表示豎排文本NSVerticalGlyphFormAttributeName //19、設定連結屬性,點擊後呼叫瀏覽器開啟指定URL地址NSLinkAttributeName //20、設定文本附件,取值為NSTextAttachment對象,常用於文字圖片混排NSAttachmentAttributeName //21、設定文本段落排版格式,取值為 NSParagraphStyle 對象NSParagraphStyleAttributeName
三、主要函數
//1、傳入CTFrame,返回一個裝有多個CTLine對象的數組。CFArrayRef CTFrameGetLines( CTFrameRef frame ) CT_AVAILABLE(10_5, 3_2);//2、擷取數組中的元素個數CFIndex CFArrayGetCount(CFArrayRef theArray); //3、擷取數組中第idx個元素const void *CFArrayGetValueAtIndex(CFArrayRef theArray, CFIndex idx);//4、 擷取所有CTLineRef的基礎原點,傳入CTFrame,CFRange,和一個CGPoint的結構體數組指標,該函數會把每一個CTLine的origin座標寫到數組裡。void CTFrameGetLineOrigins(CTFrameRef frame, CFRange range, CGPoint origins[] ) CT_AVAILABLE(10_5, 3_2);//5、擷取CTLine中文字在整段文字中的RangeCFRange CTLineGetStringRange( CTLineRef line ) CT_AVAILABLE(10_5, 3_2);//6、擷取CTLine中的CTRun的數組CFArrayRef CTLineGetGlyphRuns( CTLineRef line ) CT_AVAILABLE(10_5, 3_2); //7、擷取CTRun在整段文字中的RangeCFRange CTRunGetStringRange( CTRunRef run ) CT_AVAILABLE(10_5, 3_2); //8、 擷取點擊處position文字在整段文字中的indexCFIndex CTLineGetStringIndexForPosition(CTLineRef line, CGPoint position ) CT_AVAILABLE(10_5, 3_2); //9、擷取整段文字中charIndex位置的字元相對line的原點的x值CGFloat CTLineGetOffsetForStringIndex(CTLineRef line,CFIndex charIndex,CGFloat * __nullable secondaryOffset ) CT_AVAILABLE(10_5, 3_2);//10、擷取數組中字形個個數CFIndex CTLineGetGlyphCount( CTLineRef line ) CT_AVAILABLE(10_5, 3_2); //11、設定CoreText繪製前的座標。設定基準位置CG_EXTERN void CGContextSetTextPosition(CGContextRef __nullable c, CGFloat x, CGFloat y) CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0); //12、繪製CTLine。void CTLineDraw( CTLineRef line, CGContextRef context ) CT_AVAILABLE(10_5, 3_2); //13、擷取CTLine的上行高度,下行高度,行距double CTLineGetTypographicBounds( CTLineRef line, CGFloat * __nullable ascent, CGFloat * __nullable descent, CGFloat * __nullable leading ) CT_AVAILABLE(10_5, 3_2); //14、設定當前文本矩陣CG_EXTERN void CGContextSetTextMatrix( CGContextRef __nullable c, CGAffineTransform t) CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0); //15、擷取一行文字的範圍, 就是指把這一行文字點有的像素矩陣作為一個image圖片,來得到整個矩形地區。相對於每一行基準原點的位移量和寬高(例如:{{1.2, -2.57227}, {208.025, 19.2523}},就是相對於本身的基準原點向右位移1.2個單位,向下位移2.57227個單位,後面是寬高)CGRect CTLineGetImageBounds( CTLineRef line, CGContextRef __nullable context ) CT_AVAILABLE(10_5, 3_2);
iOS:CoreText的常用文法