TextKit框架詳細(xì)解析 (七) —— 文本編程指南之排版概念(三)

版本記錄

版本號(hào) 時(shí)間
V1.0 2018.08.30

前言

TextKit框架是對Core Text的封裝宣谈,用簡潔的調(diào)用方式實(shí)現(xiàn)了大部分Core Text的功能。 TextKit是一個(gè)偏上層的開發(fā)框架,在iOS7以上可用,使用它可以方便靈活處理復(fù)雜的文本布局,滿足開發(fā)中對文本布局的各種復(fù)雜需求唠帝。TextKit實(shí)際上是基于CoreText的一個(gè)上層框架,其是面向?qū)ο蟮男亍=酉聛韼灼覀兙鸵黄鹂匆幌逻@個(gè)框架襟衰。感興趣的看下面幾篇文章。
1. TextKit框架詳細(xì)解析 (一) —— 基本概覽和應(yīng)用場景(一)
2. TextKit框架詳細(xì)解析 (二) —— 基本概覽和應(yīng)用場景(二)
3. TextKit框架詳細(xì)解析 (三) —— 一個(gè)簡單布局示例(一)
4. TextKit框架詳細(xì)解析 (四) —— 一個(gè)簡單布局示例(二)
5. TextKit框架詳細(xì)解析 (五) —— 文本編程指南之簡介(一)
6. TextKit框架詳細(xì)解析 (六) —— 文本編程指南之展示文本內(nèi)容(二)

Typographical Concepts - 排版概念

本章定義了與文本系統(tǒng)相關(guān)的一些重要的排版概念粪摘。 表示這些概念的許多術(shù)語都反映在文本系統(tǒng)API中瀑晒。 如果您熟悉排版阀湿,則可以跳過本章。


Characters and Glyphs - 字符和字形

字符是帶有意義的書面語言的最小單位瑰妄。 字符可以對應(yīng)于語言的口頭形式的特定聲音陷嘴,羅馬字母的字母也是如此;它們可以代表整個(gè)單詞间坐,例如中文表意文字灾挨;或者它們可以代表獨(dú)立的概念,例如數(shù)學(xué)符號(hào)竹宋。 然而劳澄,在每種情況下,字符都是抽象概念蜈七。

盡管字符必須通過可識(shí)別的形狀在顯示區(qū)域中表示秒拔,但它們與該形狀不同。 也就是說飒硅,相同的字符可以以各種形式繪制砂缩。 例如,“大寫字母A”字符可以用不同的大小或不同的筆畫粗細(xì)繪制三娩,它可以傾斜或垂直庵芭,并且它可以具有某些形式的可選變化,例如襯線雀监。 字符的這些各種具體形式中的任何一種稱為字形双吆。 圖2-1顯示了所有代表字符“大寫字母A”的字形。

Figure 2-1 Glyphs of the character A

字符和字形沒有一對一的對應(yīng)關(guān)系会前。 在某些情況下好乐,字符可以由多個(gè)字形表示,例如“é”瓦宜,其可以是與字形“'”組合的“e”字形蔚万。 在其他情況下,單個(gè)字形可以表示多個(gè)字符歉提,如連字或連接字母的情況笛坦。 圖2-2顯示了單個(gè)字符和相鄰時(shí)經(jīng)常使用的單字形連字区转。

Figure 2-2 Ligatures

連字是上下文形式的一個(gè)示例苔巨,其中用于表示字符的字形根據(jù)其旁邊的字符而變化。其他上下文形式包括用于開始或結(jié)束單詞的字符的替代字形废离。

計(jì)算機(jī)將字符存儲(chǔ)為通過編碼表映射到其對應(yīng)字符的數(shù)字侄泽。 iOS和OS X原生的編碼方案遵循Unicode標(biāo)準(zhǔn)。 Unicode提供了一種標(biāo)準(zhǔn)方法蜻韭,用于為世界上每種現(xiàn)代書面語言中的每個(gè)字符分配唯一編號(hào)悼尾,與所使用的平臺(tái)柿扣,程序和編程語言無關(guān)。該通用標(biāo)準(zhǔn)解決了使用數(shù)百種沖突編碼方案的不同計(jì)算機(jī)系統(tǒng)的長期存在的問題闺魏。它還提供了指定如何處理雙向文本和上下文表單的信息未状;如何形成單詞和斷行;如何用不同語言對文本進(jìn)行排序析桥;以及如何格式化適合不同語言的數(shù)字司草,日期,時(shí)間和其他元素泡仗。

字形也由稱為字形代碼的數(shù)字代碼表示埋虹。在構(gòu)圖和布局處理期間,布局管理器選擇用于描繪字符的字形娩怎。布局管理器確定要使用的字形以及將它們放置在顯示或視圖中的位置搔课。布局管理器緩存正在使用的字形代碼,并提供在字符和字形之間以及字符和視圖坐標(biāo)之間進(jìn)行轉(zhuǎn)換的方法截亦。


Typefaces and Fonts - 字體

字體(typeface)是用于書面語言中的一些或所有字符的一組視覺相關(guān)的形狀爬泥。例如,Times是一種字體崩瓤,由斯坦利·莫里森于1931年為“倫敦泰晤士報(bào)”設(shè)計(jì)急灭。Times中的所有字母形式在外觀上都是相關(guān)的,在莖(垂直筆畫)和計(jì)數(shù)器(字母體中的圓形形狀)和其他元素之間具有一致的比例谷遂。當(dāng)以文本塊布局時(shí)葬馋,字體中的形狀一起工作以增強(qiáng)可讀性。

類型風(fēng)格(typestyle)或簡單風(fēng)格是字體的區(qū)別視覺特征肾扰。例如畴嘶,羅馬式風(fēng)格的特征是直立字母,其襯線和莖比水平線粗集晚。在斜體字型中窗悯,字母向右傾斜并且是圓形的,類似于草書或手寫字母形狀偷拔。字體通常具有幾種相關(guān)的類型蒋院。

字體(font)是一系列字形,用于描述一致大小莲绰,字體和字體樣式的字符欺旧。字體旨在用于特定的顯示環(huán)境。字體包含所有上下文形式的字形蛤签,例如連字辞友,以及普通字符形式。

字體系列(font family)是一組字體但在typestyle中不同的字體。因此称龙,例如留拾,Times是字體系列的名稱(以及其字體的名稱)。 Times romanTimes Italic是屬于Times系列的兩種單獨(dú)font的名稱鲫尊。圖2-3顯示了Times字體系列中的幾種字體痴柔。

Figure 2-3 Fonts in the Times font family

樣式(Styles),也稱為特征(traits)疫向,包括bold, italic, condensed, expanded, narrow, small caps, poster fonts, and fixed pitch竞帽。 文本系統(tǒng)包括稱為字體描述符的對象,它們提供字體匹配功能鸿捧,因此您可以通過創(chuàng)建字體描述符(例如屹篓,僅使用系列名稱或權(quán)重)來部分描述字體,然后您可以找到系統(tǒng)給定特征匹配的所有字體匙奴。


Text Layout - 文本布局

文本布局是在顯示設(shè)備上堆巧,在稱為text view的區(qū)域中布置字形的過程,其表示與傳統(tǒng)排版中的頁面類似的區(qū)域泼菌。字形相對于彼此布置的順序稱為文本方向(direction)谍肤。在英語和源自拉丁語的其他語言中,字形并排放置以形成由空格分隔的單詞哗伯。單詞從text view左上角開始的行從左到右排列荒揣,直到文本到達(dá)視圖的右側(cè)。然后焊刹,文本在前一行開頭的視圖左側(cè)開始一個(gè)新行系任,并且布局以相同的方式繼續(xù)到文本視圖的底部。

在其他語言中虐块,字形布局可能完全不同俩滥。例如,某些語言從右到左或垂直而不是水平布置字形贺奠。特別是在技術(shù)寫作中霜旧,將同一行中具有不同文本方向的語言(例如英語和希伯來語)混合在一起是很常見的。一些書寫系統(tǒng)甚至在每隔一行中交替布局方向(稱為boustrophedonic書寫)儡率。某些語言不會(huì)將字形分組為由空格分隔的單詞挂据。此外,一些應(yīng)用程序要求任意安排字形儿普;例如崎逃,在圖形設(shè)計(jì)上下文中,布局可能需要將字形排列在非線性路徑上箕肃。

要從字形字符串創(chuàng)建行婚脱,布局引擎必須通過查找結(jié)束一行并開始下一行的點(diǎn)來執(zhí)行換行。在文本系統(tǒng)中勺像,您可以指定單詞或字形邊界處的換行符障贸。在羅馬文本中,字形之間斷開的單詞需要在斷點(diǎn)處插入連字符吟宦。

布局管理器沿著稱為基線(baseline)的不可見線布置字形篮洁。在羅馬文本中,基線是水平的殃姓,大多數(shù)字形的下邊緣都在其上袁波。一些字形延伸到基線以下,包括像“g”這樣具有下行或“尾巴”的字符亿鲜,以及像“O”這樣的大圓形字符搀暑,它們必須略微延伸到基線以下以補(bǔ)償光學(xué)效應(yīng)臣咖。其他書寫系統(tǒng)將字形置于基線下方或居中。每個(gè)字形都包含一個(gè)原點(diǎn)枷颊,布局管理器使用該原點(diǎn)使其與基線正確對齊。

字形設(shè)計(jì)者使用稱為度量(metrics)的字體提供一組測量该面,這些字體描述字體中每個(gè)字形周圍的間距夭苗。布局管理器使用這些指標(biāo)來確定字形位置。在水平文本中隔缀,字形具有稱為提前寬度(advance width)的度量题造,其測量沿著基線到下一個(gè)字形的原點(diǎn)的距離。通常在字形的原點(diǎn)和左側(cè)之間存在一些空間猾瘸,稱為左側(cè)間距(left-side bearing)界赔。在字形的右側(cè)和前進(jìn)寬度描述的點(diǎn)之間可能還有空間,稱為右側(cè)間距(right-side bearing)牵触。字形的垂直維度由稱為上升(ascent)和下降(descent)的兩個(gè)度量提供仔蝌。上升是從原點(diǎn)(在基線上)到字體中最高的字形頂部的距離。下降荒吏,即從基線到字體最深下降部分底部的距離敛惊。包圍字形可見部分的矩形稱為邊界矩形(bounding rectangle)或邊界框(bounding box)。圖2-4說明了這些指標(biāo)绰更。

Figure 2-4 Glyph metrics

默認(rèn)情況下瞧挤,在水平文本中,排字工具(typesetters)使用advance width并排放置字形儡湾,從而生成標(biāo)準(zhǔn)的interglyph空間特恬。 但是,在某些組合中徐钠,通過字距調(diào)整kerning使文本更具可讀性癌刽,這是縮小或拉伸兩個(gè)字形之間的空間。 在大寫字母W和大寫字母A之間出現(xiàn)一個(gè)非常常見的字距調(diào)整示例,如圖2-5所示显拜。 類型設(shè)計(jì)者在字體的度量中包括字距調(diào)整信息衡奥。 文本系統(tǒng)提供了關(guān)閉字距調(diào)整的方法,使用字體提供的默認(rèn)設(shè)置远荠,或者在選擇的文本中收緊或松開字距調(diào)整矮固。

Figure 2-5 Kerning

類型系統(tǒng)通常以稱為點(diǎn)(points)的單位來測量字體度量,在大多數(shù)計(jì)算機(jī)排版系統(tǒng)中譬淳,這些單位的測量精確度為每英寸72档址。添加上升ascent的距離和字體的下降descent提供了字體的磅值。

在傳統(tǒng)metal-type頁面布局中用于此目的的slugs之后邻梆,在類型的線之間排版期間添加的空間稱為前導(dǎo)leading守伸。上升和下降加上前導(dǎo)的總量提供了字體的行高。 (前導(dǎo)leading有時(shí)也稱為linegap浦妄。它通常被指定為字體的點(diǎn)大小與設(shè)置文本塊的行高的比率尼摹,例如14 / 16.5。)

雖然前面的類型設(shè)計(jì)排版概念可能有些深?yuàn)W校辩,但大多數(shù)在計(jì)算機(jī)或打字機(jī)上創(chuàng)建文檔的人都熟悉頁面上文本布局的元素窘问。例如,邊距是頁面邊緣和布局引擎放置字形的文本區(qū)域之間的空白區(qū)域宜咒。對齊描述了文本行相對于邊距的放置方式惠赫。例如,水平文本可以右對齊故黑,左對齊或居中對齊儿咱,如圖2-6所示。

Figure 2-6 Alignment of text relative to margins

文本行也可以證明是合理的场晶,對于水平文本混埠,通過改變字間和間隔符間距,線條在左右邊緣上對齊诗轻,如圖2-7所示钳宪。 在文本流被分成行和連字符以及其他字形替換后,系統(tǒng)會(huì)根據(jù)請求執(zhí)行對齊和校對扳炬。

Figure 2-7 Justified text

后記

本篇主要講述了文本編程指南之排版概念吏颖,感興趣的給個(gè)贊或者關(guān)注~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市恨樟,隨后出現(xiàn)的幾起案子半醉,更是在濱河造成了極大的恐慌,老刑警劉巖劝术,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缩多,死亡現(xiàn)場離奇詭異呆奕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)衬吆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門梁钾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咆槽,你說我怎么就攤上這事陈轿∪Ψ模” “怎么了秦忿?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蛾娶。 經(jīng)常有香客問我灯谣,道長,這世上最難降的妖魔是什么蛔琅? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任胎许,我火速辦了婚禮,結(jié)果婚禮上罗售,老公的妹妹穿的比我還像新娘辜窑。我一直安慰自己,他們只是感情好寨躁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布穆碎。 她就那樣靜靜地躺著,像睡著了一般职恳。 火紅的嫁衣襯著肌膚如雪所禀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天放钦,我揣著相機(jī)與錄音色徘,去河邊找鬼。 笑死操禀,一個(gè)胖子當(dāng)著我的面吹牛褂策,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颓屑,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼斤寂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了邢锯?” 一聲冷哼從身側(cè)響起扬蕊,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎丹擎,沒想到半個(gè)月后尾抑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歇父,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年再愈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了榜苫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翎冲,死狀恐怖垂睬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情抗悍,我是刑警寧澤驹饺,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站缴渊,受9級特大地震影響赏壹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衔沼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一蝌借、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧指蚁,春花似錦菩佑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缘圈,卻和暖如春劣光,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背糟把。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工绢涡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遣疯。 一個(gè)月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓雄可,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缠犀。 傳聞我的和親對象是個(gè)殘疾皇子数苫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

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