版本記錄
版本號(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”的字形。
字符和字形沒有一對一的對應(yīng)關(guān)系会前。 在某些情況下好乐,字符可以由多個(gè)字形表示,例如“é”瓦宜,其可以是與字形“'”組合的“e”字形蔚万。 在其他情況下,單個(gè)字形可以表示多個(gè)字符歉提,如連字或連接字母的情況笛坦。 圖2-2顯示了單個(gè)字符和相鄰時(shí)經(jīng)常使用的單字形連字区转。
連字是上下文形式的一個(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 roman
和Times Italic
是屬于Times系列的兩種單獨(dú)font的名稱鲫尊。圖2-3顯示了Times字體系列中的幾種字體痴柔。
樣式(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)绰更。
默認(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)整矮固。
類型系統(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所示。
文本行也可以證明是合理的场晶,對于水平文本混埠,通過改變字間和間隔符間距,線條在左右邊緣上對齊诗轻,如圖2-7所示钳宪。 在文本流被分成行和連字符以及其他字形替換后,系統(tǒng)會(huì)根據(jù)請求執(zhí)行對齊和校對扳炬。
后記
本篇主要講述了文本編程指南之排版概念吏颖,感興趣的給個(gè)贊或者關(guān)注~~~