CoreText 入門(mén)(一)-文本繪制

本文主要的內(nèi)容是討論如何使用CoreText進(jìn)行最簡(jiǎn)單的文本內(nèi)容的繪制蔽豺,同時(shí)也談到的CoreText繪圖的一個(gè)最基本但是也是最重要的CoreText坐標(biāo)系的概念绑咱,CoreText坐標(biāo)系的概念是貫穿所有的CoreText繪圖場(chǎng)景,所有這里先做個(gè)介紹

其它文章:
CoreText入門(mén)(一)-文本繪制
CoreText入門(mén)(二)-繪制圖片
CoreText進(jìn)階(三)-事件處理
CoreText進(jìn)階(四)-文字行數(shù)限制和顯示更多
CoreText進(jìn)階(五)- 文字排版樣式和效果
CoreText進(jìn)階(六)-內(nèi)容大小計(jì)算和自動(dòng)布局
CoreText進(jìn)階(七)-添加自定義View和對(duì)其

本文的主要內(nèi)容如下

  • CoreText是什么
  • 坐標(biāo)系
  • 簡(jiǎn)單的文字繪制
  • 總結(jié)

Demo:CoreTextDemo

CoreText是什么

蘋(píng)果的文檔中對(duì)CoreText的描述如下

Core Text is an advanced, low-level technology for laying out text and handling fonts. Core Text works directly with Core Graphics (CG), also known as Quartz, which is the high-speed graphics rendering engine that handles two-dimensional imaging at the lowest level in OS X and iOS.

翻譯過(guò)來(lái)的意思就是:CoreText是一種高級(jí)的底層技術(shù), 用于布局文本和處理字體乐横。CoreText直接與Core Graphics (CG) 一起工作, 也稱(chēng)為Quartz, 它是在 OS X 和 iOS 的最底層的處理二維成像的高速圖形渲染引擎垦页。

坐標(biāo)系

UIKit的坐標(biāo)系原點(diǎn)是在右上角赋续,CoreText的坐標(biāo)原點(diǎn)是在左下角,并且繪制的內(nèi)容是顛倒的,所以需要進(jìn)行坐標(biāo)轉(zhuǎn)換囊陡,繪制的內(nèi)容顯示才能正常

坐標(biāo)系

使用以下的代碼進(jìn)行坐標(biāo)系的轉(zhuǎn)換

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetTextMatrix(context, CGAffineTransformIdentity);
    CGContextTranslateCTM(context, 0, self.bounds.size.height);
    CGContextScaleCTM(context, 1, -1);

步驟示例圖:

步驟示例圖

簡(jiǎn)單的文字繪制

效果圖

效果圖

文字繪制的流程圖:

文字繪制的流程圖

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetTextMatrix(context, CGAffineTransformIdentity);
    CGContextTranslateCTM(context, 0, self.bounds.size.height);
    CGContextScaleCTM(context, 1, -1);

    // 繪制區(qū)域
    CGMutablePathRef path = CGPathCreateMutable();
    CGPathAddRect(path, NULL, self.bounds);

    // 繪制的內(nèi)容屬性字符串
    NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:18],
                                 NSForegroundColorAttributeName: [UIColor blueColor]
                                 };
    NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:@"Hello world Hello world Hello world Hello world Hello world Hello world Hello world Hello world Hello world Hello world Hello world Hello world" attributes:attributes];

    // 使用NSMutableAttributedString創(chuàng)建CTFrame
    CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attrStr);
    CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, attrStr.length), path, NULL);

    // 使用CTFrame在CGContextRef上下文上繪制
    CTFrameDraw(frame, context);
}

總結(jié)

使用CoreText繪制文本步驟比較簡(jiǎn)單芳绩,這里面子用到CoreText中的一個(gè)類(lèi)CTFrame,CoreText中還有許多其他的概念沒(méi)有涉及到撞反,下一篇CoreText入門(mén)(二)-繪制圖片會(huì)涉及到CoreText中更多的概念

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妥色,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子遏片,更是在濱河造成了極大的恐慌嘹害,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吮便,死亡現(xiàn)場(chǎng)離奇詭異笔呀,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)髓需,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)许师,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人僚匆,你說(shuō)我怎么就攤上這事微渠。” “怎么了咧擂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵逞盆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我松申,道長(zhǎng)云芦,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任攻臀,我火速辦了婚禮焕数,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘刨啸。我一直安慰自己堡赔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布设联。 她就那樣靜靜地躺著善已,像睡著了一般。 火紅的嫁衣襯著肌膚如雪离例。 梳的紋絲不亂的頭發(fā)上换团,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天,我揣著相機(jī)與錄音宫蛆,去河邊找鬼艘包。 笑死的猛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的想虎。 我是一名探鬼主播卦尊,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼舌厨!你這毒婦竟也來(lái)了岂却?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤裙椭,失蹤者是張志新(化名)和其女友劉穎躏哩,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體揉燃,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扫尺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了你雌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片器联。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖婿崭,靈堂內(nèi)的尸體忽然破棺而出拨拓,到底是詐尸還是另有隱情,我是刑警寧澤氓栈,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布渣磷,位于F島的核電站,受9級(jí)特大地震影響授瘦,放射性物質(zhì)發(fā)生泄漏醋界。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一提完、第九天 我趴在偏房一處隱蔽的房頂上張望形纺。 院中可真熱鬧,春花似錦徒欣、人聲如沸逐样。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)脂新。三九已至,卻和暖如春粗梭,著一層夾襖步出監(jiān)牢的瞬間习蓬,已是汗流浹背鸳粉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工舀瓢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奏纪。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像酷宵,于是被迫代替她去往敵國(guó)和親亥贸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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

  • 1浇垦、通過(guò)CocoaPods安裝項(xiàng)目名稱(chēng)項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 15,980評(píng)論 3 119
  • Text Kit學(xué)習(xí)(入門(mén)和進(jìn)階): http://www.cocoachina.com/industry/201...
    F麥子閱讀 4,036評(píng)論 1 13
  • 蘋(píng)果文檔 https://developer.apple.com/documentation/coretext C...
    陽(yáng)明先生_X自主閱讀 427評(píng)論 0 4
  • iOS沒(méi)有現(xiàn)成的支持圖文混排的控件,而要用多個(gè)基礎(chǔ)控件組合拼成圖文混排這樣復(fù)雜的排版荣挨,是件很苦逼的事情男韧。對(duì)此的解決...
    清風(fēng)沐沐閱讀 672評(píng)論 0 2
  • 小可單姓吳,曾經(jīng)怨恨父親默垄,人生在世此虑,傳我吳姓,何以擁有口锭?好在此吳非彼無(wú)朦前,神馬都是浮云。從事推銷(xiāo)工作N年鹃操,一門(mén)心思想...
    斯麥爾閱讀 436評(píng)論 0 4