我們都知道最初CoreText的設(shè)計(jì)是針對(duì)Mac開發(fā)的,所有的坐標(biāo)系都是基于Mac的坐標(biāo)系,原點(diǎn)在左下角,上一節(jié)的筆記中我們已經(jīng)對(duì)坐標(biāo)系進(jìn)行了反轉(zhuǎn).而且介紹了關(guān)于坐標(biāo)系旋轉(zhuǎn),放縮,平移的函數(shù)和方法.現(xiàn)在我們就進(jìn)行下面的學(xué)習(xí).
先看下面兩個(gè)方法:
先看第一個(gè)CGMutablePathRef這個(gè),他是creat了一個(gè)CGMutablePathRef的實(shí)例,那它的作用到底是做了什么啦,我們都只到蘋果開發(fā)的語言都是能夠從字面看出大概的意思的,那就是創(chuàng)建了一個(gè)可變的文本路徑,為什么說是可變啦.因?yàn)樗图项愐粯佣际欠譃榭勺兒筒豢勺兊?他所對(duì)應(yīng)的不可變的類型就是CGPathRef.為什么要?jiǎng)?chuàng)建這個(gè)可變的文本路徑啦,因?yàn)槲覀兿胍诤竺嫱ㄟ^CGPathAddRect函數(shù)來得到一個(gè)填充區(qū)域,因?yàn)槲覀冊(cè)诤竺嫘枰獙⑵浞湃氲揭粋€(gè)框架中.這個(gè)兩個(gè)函數(shù)也可以合并為一個(gè)函數(shù).
上面兩個(gè)函數(shù)最終的結(jié)果和這個(gè)函數(shù)的結(jié)果是一致的.代碼貼出來了,效果就不看了,下去自己可以嘗試一下.
好了現(xiàn)在我們需要的填充路徑也有了,那現(xiàn)在還缺什么啦,
1.繪制的文本還沒有出現(xiàn)啦.
2.說了用CoreText繪制在上面,那到底如何繪制的啦.下面就開始我們這兩點(diǎn)研究吧.
了解TextKit的人知道,CoreText和TextKit都可以使用屬性化字符串,可以使用NSMutableAttributedString也可以使用CFMutableAttributedString對(duì)象,這里的轉(zhuǎn)換橋接關(guān)系就不講了,如果有興趣,改天可以專門寫一篇Foundation和CoreFoundation對(duì)象之間的橋接和轉(zhuǎn)換.
好了說了這么多,那我們先創(chuàng)建繪制的文本吧
創(chuàng)建玩繪制文本,拿到一接下來該怎么做啦.
文本這個(gè)東西都講究字體,字形,和排版等,那在CoreText是如何管理這個(gè)排版和布局啦.
CoreText為我們提供了一個(gè)創(chuàng)建框架排版器的方法,而且和上面的這個(gè)屬性化字符串相關(guān).
他是利用屬性花字符串創(chuàng)建了一個(gè)排版器,現(xiàn)在我們不過多的研究這個(gè)排版器.
從上面一路創(chuàng)建和修改下來發(fā)現(xiàn)有幾個(gè)報(bào)黃色警告,提示沒有用到,好了現(xiàn)在就搞到用到他們的時(shí)候了,到底什么東西要用到這些東西啦.那就是將整個(gè)填充區(qū)域都能放的下的框架.
看下面的代碼是如何創(chuàng)建這個(gè)框架的.
這個(gè)函數(shù)需要的參數(shù)都有,排版器,CFRange對(duì)象和上面創(chuàng)建的填充區(qū)域,和一個(gè)存放單個(gè)字形等屬性的CFDictionary.這個(gè)函數(shù)并不能保證文本正好可以放進(jìn)框架中,CTFramesetterCreateFrame只是在填充區(qū)域中布局文本,直到空間不足或者是文本結(jié)束.效果如下:文本較長(zhǎng),繪制不下的情況.
效果圖如下
然后就是將框架會(huì)知道上下文中,并釋放上面所使用creat創(chuàng)建的關(guān)于CoreFoundtion框架的對(duì)象.
那么簡(jiǎn)單的就這么完成了學(xué)習(xí),下面就該進(jìn)入復(fù)雜的學(xué)習(xí)了.如果還有什么沒有理解或者是有什么更好的想法的可以評(píng)論或與我聯(lián)系.如果喜歡文章或者想了解更多的關(guān)于CoreText的內(nèi)容就請(qǐng)動(dòng)動(dòng)小手,點(diǎn)下關(guān)注,不會(huì)懷孕的,不要怕!帶走想要的知識(shí),留下你們的??.
謝謝.
本人聯(lián)系方式:qq:513961360
email:513961360@qq.com
也可以加我們的qq群希望能與朋友們一起聊天和學(xué)習(xí).群里還有很多iOS開發(fā)者,幫助我們解決問題,并且同時(shí)學(xué)習(xí).
qq群號(hào):580284575