NSString *title =[NSString stringWithFormat:@"%@",@"繪制文字"];
NSDictionary *titDic = @{NSForegroundColorAttributeName:[UIColor redColor],
NSFontAttributeName:[UIFont systemFontOfSize:14.0]
};
//富文本樣式
NSMutableAttributedString *attributeTitle = [[NSMutableAttributedString alloc] initWithString:title attributes:titDic];
//設(shè)置frame
CTFramesetterRef titFrameSetterRef = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attributeTitle);
//獲取繪制高度
CGFloat viewW = self.view.bounds.size.width;
CGSize reSize = CGSizeMake(viewW, 10000); //預(yù)估的繪制范圍,但是 hight=10000 必須是具體的數(shù)值,系統(tǒng)可以形成一個(gè)具體的矩形塊,否則高度會(huì)不準(zhǔn)
//繪制的尺寸
CGSize titSize = CTFramesetterSuggestFrameSizeWithConstraints(titFrameSetterRef, CFRangeMake(0, 0), NULL, reSize, NULL);
CGRect titRect = CGRectMake(0, 0, viewW, titSize.height);
//繪制路徑
CGPathRef titPathRef = CGPathCreateWithRect(titRect, NULL);
CTFrameRef frameRef = CTFramesetterCreateFrame(titFrameSetterRef, CFRangeMake(0, 0), titPathRef, NULL);
//獲取畫(huà)布
CGContextRef contextRef = UIGraphicsGetCurrentContext();
CGContextSetTextMatrix(contextRef, CGAffineTransformIdentity);
//坐標(biāo)系轉(zhuǎn)換 繪制的時(shí)候 CT是以左上角為原點(diǎn)(0,0) Y軸向下 設(shè)備顯示Y軸向上所以要改變坐標(biāo)系
//平移坐標(biāo)系 x軸平移0 y軸平移titSize.height
CGContextTranslateCTM(contextRef, 0, titSize.height);
//縮放坐標(biāo)軸 x軸方向縮放1.0 y軸縮放-1.0 即x坐標(biāo)乘1.0 y坐標(biāo)乘-1.0 坐標(biāo)軸是反轉(zhuǎn)的
CGContextScaleCTM(contextRef, 1.0, -1.0);
//繪制文字
CTFrameDraw(frameRef, contextRef);
//釋放創(chuàng)建的對(duì)象
CFRelease(titFrameSetterRef);
CGPathRelease(titPathRef);
CFRelease(frameRef);
//還有旋轉(zhuǎn)坐標(biāo)系
- void CGContextRotateCTM ( CGContextRef c, CGFloat angle ):旋轉(zhuǎn)坐標(biāo)系統(tǒng)。
該方法控制坐標(biāo)系統(tǒng)旋轉(zhuǎn) angle 弧度。在縮放后的坐標(biāo)系統(tǒng)上繪制圖形時(shí),所有坐標(biāo)點(diǎn)的 X、Y 坐標(biāo)都相當(dāng)于旋轉(zhuǎn)了 angle弧度之后的坐標(biāo)。
為了讓開(kāi)發(fā)者在進(jìn)行坐標(biāo)變換時(shí)無(wú)須計(jì)算多次坐標(biāo)變換后的累加結(jié)果,Quartz 2D還提供了如下兩個(gè)方法來(lái)保存、恢復(fù)繪圖狀態(tài)。
- void CGContextSaveGState ( CGContextRef c ):保存當(dāng)前的繪圖狀態(tài)。
- void CGContextRestoreGState ( CGContextRef c ):恢復(fù)之前保存的繪圖狀態(tài)。
需要說(shuō)明的是,CGContextSaveGState() 函數(shù)保存的繪圖狀態(tài),不僅包括當(dāng)前坐標(biāo)系統(tǒng)的狀態(tài),也包括當(dāng)前設(shè)置的填充風(fēng)格、線條風(fēng)格、陰影風(fēng)格等各種繪圖狀態(tài)。但 CGContextSaveGState() 函數(shù)不會(huì)保存當(dāng)前繪制的圖形。
這些基本夠平時(shí)使用的
富文本繪制 之Quartz 2D
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- ?? rotate 是以原點(diǎn)為中心旋轉(zhuǎn),Quartz 2D 創(chuàng)建的圖形上下文旋轉(zhuǎn)中心為左下角,角度值正數(shù)為逆時(shí)針旋...
- 很多童鞋知道CoreGraphics,但不見(jiàn)得聽(tīng)過(guò)Quartz 2D,二者關(guān)系見(jiàn)上一篇(等等,其實(shí)就是土豆和馬鈴薯...
- 項(xiàng)目要做說(shuō)說(shuō)功能,說(shuō)說(shuō)列表cell的內(nèi)容和評(píng)論之間有個(gè)帶小尖角的分割線,如圖紅箭頭所指。最近在看Quartz 2D...
- 一.繪制進(jìn)度條 在研究了Quartz 2D繪制路徑、文字之后,我們需要實(shí)例運(yùn)用一下。首先我們制作一個(gè)如下的效果,拖...