(轉(zhuǎn)載)教你如何在iOS項(xiàng)目中設(shè)置各種字體

原文地址:http://www.cnblogs.com/jijiYY/p/4736967.html
在iOS開發(fā)中設(shè)置字體的方法有很多種向图,下面為大家介紹比較常用的三種方法
1.使用系統(tǒng)默認(rèn)提供的字體
系統(tǒng)默認(rèn)提供的字體主要是指UIFont中提供的字體泳秀,其使用代碼為:

fontLabel.font = [UIFont fontWithName:@"Marion" size:17];

或者是通過字體詳細(xì)字典對(duì)字體屬性進(jìn)行設(shè)置

/* UIFontDescriptorFamilyAttribute:設(shè)置字體家族名 
UIFontDescriptorNameAttribute :設(shè)置字體的字體名 
UIFontDescriptorSizeAttribute :設(shè)置字體尺寸 
UIFontDescriptorMatrixAttribute:設(shè)置字體形變 */ 
UIFontDescriptor *attributeFontDescriptor = [UIFontDescriptor fontDescriptorWithFontAttributes: @{UIFontDescriptorFamilyAttribute: @"Marion", UIFontDescriptorNameAttribute:@"Marion-Regular", 
UIFontDescriptorSizeAttribute: @40.0, 
UIFontDescriptorMatrixAttribute:[NSValue valueWithCGAffineTransform:CGAffineTransformMakeRotation(M_1_PI*1.5) ]}];
 fnotLabel.font = [UIFont fontWithDescriptor:attributeFontDescriptor size:0.0];

其中的字體家族名和字體名可以通過以下方法獲取

NSLog(@"familyNames:%@",[UIFont familyNames]);

以上兩種方法均可以為label設(shè)置字體,但是全部是只針對(duì)英文數(shù)字榄攀,對(duì)中文無效嗜傅。要想改變中文字體還需要使用后面兩種辦法

2.動(dòng)態(tài)下載字體

iOS6以后蘋果就開始支持動(dòng)態(tài)下載中文字體已供應(yīng)用中展示個(gè)性字體的需求,由于下載的時(shí)候需要使用的名字是PostScript名稱檩赢,需要使用Mac內(nèi)自帶的應(yīng)用“字體冊(cè)“來獲得相應(yīng)字體的PostScript名稱吕嘀。如下顯示了從”字體冊(cè)“中獲取《娃娃體-繁 常規(guī)體》字體的PostScript名稱的截圖


具體代碼就不一一介紹了,大家可以參考蘋果提供的有關(guān)文檔:https://developer.apple.com/library/ios/samplecode/DownloadFont/Listings/DownloadFont_ViewController_m.html#//apple_ref/doc/uid/DTS40013404-DownloadFont_ViewController_m-DontLinkElementID_6
或者也可以參考唐巧先生的博客有比較詳細(xì)的介紹:http://blog.devtang.com/blog/2013/08/11/ios-asian-font-download-introduction/
下面是我研究后的測(cè)試demo贞瞒,提供給大家參考:

- (void)asynchronouslySetFontName:(NSString *)fontName
{
    UIFont* aFont = [UIFont fontWithName:fontName size:24];
    // If the font is already downloaded
    if (aFont && ([aFont.fontName compare:fontName] == NSOrderedSame || [aFont.familyName compare:fontName] == NSOrderedSame)) {
        // Go ahead and display the sample text.
        _fLabelView.text = @"歡迎查看我的博客";
        _fLabelView.font = [UIFont fontWithName:fontName size:24];
        return;
    }
    
    // Create a dictionary with the font's PostScript name.
    NSMutableDictionary *attrs = [NSMutableDictionary dictionaryWithObjectsAndKeys:fontName, kCTFontNameAttribute, nil];
    
    // Create a new font descriptor reference from the attributes dictionary.
    CTFontDescriptorRef desc = CTFontDescriptorCreateWithAttributes((__bridge CFDictionaryRef)attrs);
    
    NSMutableArray *descs = [NSMutableArray arrayWithCapacity:0];
    [descs addObject:(__bridge id)desc];
    CFRelease(desc);
    
    __block BOOL errorDuringDownload = NO;
    
    // Start processing the font descriptor..
    // This function returns immediately, but can potentially take long time to process.
    // The progress is notified via the callback block of CTFontDescriptorProgressHandler type.
    // See CTFontDescriptor.h for the list of progress states and keys for progressParameter dictionary.
    CTFontDescriptorMatchFontDescriptorsWithProgressHandler( (__bridge CFArrayRef)descs, NULL,  ^(CTFontDescriptorMatchingState state, CFDictionaryRef progressParameter) {
        
        //NSLog( @"state %d - %@", state, progressParameter);
        
        double progressValue = [[(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingPercentage] doubleValue];
        
        if (state == kCTFontDescriptorMatchingDidBegin) {
            dispatch_async( dispatch_get_main_queue(), ^ {
                // Show an activity indicator
                NSLog(@"Begin Matching");
            });
        } else if (state == kCTFontDescriptorMatchingDidFinish) {
            dispatch_async( dispatch_get_main_queue(), ^ {
                // Remove the activity indicator
                
                // Display the sample text for the newly downloaded font
                _fLabelView.text = @"歡迎查看我的博客";
                _fLabelView.font = [UIFont fontWithName:fontName size:24];
                
                // Log the font URL in the console
                CTFontRef fontRef = CTFontCreateWithName((__bridge CFStringRef)fontName, 0., NULL);
                CFStringRef fontURL = CTFontCopyAttribute(fontRef, kCTFontURLAttribute);
                NSLog(@"%@", (__bridge NSURL*)(fontURL));
                CFRelease(fontURL);
                CFRelease(fontRef);
                
                if (!errorDuringDownload) {
                    NSLog(@"%@ downloaded", fontName);
                }
            });
        } else if (state == kCTFontDescriptorMatchingWillBeginDownloading) {
            dispatch_async( dispatch_get_main_queue(), ^ {
                // Show a progress bar
             
                NSLog(@"Begin Downloading");
            });
        } else if (state == kCTFontDescriptorMatchingDidFinishDownloading) {
            dispatch_async( dispatch_get_main_queue(), ^ {
                // Remove the progress bar

                NSLog(@"Finish downloading");
            });
        } else if (state == kCTFontDescriptorMatchingDownloading) {
            dispatch_async( dispatch_get_main_queue(), ^ {
                // Use the progress bar to indicate the progress of the downloading
                NSLog(@"Downloading %.0f%% complete", progressValue);
            });
        } else if (state == kCTFontDescriptorMatchingDidFailWithError) {
            // An error has occurred.
            // Get the error message
            NSError *error = [(__bridge NSDictionary *)progressParameter objectForKey:(id)kCTFontDescriptorMatchingError];
            if (error != nil) {
                _errorMessage = [error description];
            } else {
                _errorMessage = @"ERROR MESSAGE IS NOT AVAILABLE!";
            }
            // Set our flag
            errorDuringDownload = YES;
            
            dispatch_async( dispatch_get_main_queue(), ^ {
                NSLog(@"Download error: %@", _errorMessage);
            });
        }
        return (bool)YES;
    });   
}

只要在相應(yīng)地方調(diào)用就可以了:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    _fLabelView = [[UITextView alloc] initWithFrame:CGRectMake(50, 100, 250, 100)];
    [self.view addSubview:_fLabelView];
    
    [self asynchronouslySetFontName:@"HanziPenSC-W3"];
    
}

下面是運(yùn)行后的結(jié)果:


3.引入外部字體

現(xiàn)在網(wǎng)上不管是windows字體偶房,還是Android字體只要是ttf格式的,或者是蘋果提供的ttc军浆、otf格式棕洋,一般iOS程序都支持內(nèi)嵌。具體做法:
先將需要下載的字體拖到項(xiàng)目中


在info文件中添加相應(yīng)字段

然后就可以使用上面提供的方法[UIFont fontWithName:@"迷你簡(jiǎn)咪咪" size:17]方法給英文乒融、數(shù)字或者中文設(shè)置上這種字體掰盘。可以輸出一下[UIFont familyNames]檢測(cè)是否已經(jīng)添加

也可以在xib中為label設(shè)置這種字體了

網(wǎng)上下載的字體也不一定都是可以使用赞季,下面提供大家一些常用字體供大家下載:
鏈接: http://pan.baidu.com/s/1kTVX8qF 密碼: vdwa
要想獲取更加全面的字體還可以使用蘋果自己提供的各種字體格式愧捕,還是可以通過Mac應(yīng)用“字體側(cè)”獲取,例如:


用法跟下載的字體一樣

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市申钩,隨后出現(xiàn)的幾起案子次绘,更是在濱河造成了極大的恐慌,老刑警劉巖典蜕,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件断盛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡愉舔,警方通過查閱死者的電腦和手機(jī)钢猛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轩缤,“玉大人命迈,你說我怎么就攤上這事』鸬模” “怎么了壶愤?”我有些...
    開封第一講書人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)馏鹤。 經(jīng)常有香客問我征椒,道長(zhǎng),這世上最難降的妖魔是什么湃累? 我笑而不...
    開封第一講書人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任勃救,我火速辦了婚禮碍讨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蒙秒。我一直安慰自己勃黍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開白布晕讲。 她就那樣靜靜地躺著覆获,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓢省。 梳的紋絲不亂的頭發(fā)上弄息,一...
    開封第一講書人閱讀 50,043評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音勤婚,去河邊找鬼疑枯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蛔六,可吹牛的內(nèi)容都是我干的荆永。 我是一名探鬼主播,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼国章,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼具钥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起液兽,我...
    開封第一講書人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤骂删,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后四啰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宁玫,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年柑晒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了欧瘪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匙赞,死狀恐怖佛掖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涌庭,我是刑警寧澤芥被,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站坐榆,受9級(jí)特大地震影響拴魄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一匹中、第九天 我趴在偏房一處隱蔽的房頂上張望蚀狰。 院中可真熱鬧竞惋,春花似錦、人聲如沸随闽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逻澳。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間专肪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工堪侯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嚎尤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓伍宦,卻偏偏與公主長(zhǎng)得像芽死,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子次洼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351

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

  • 在iOS開發(fā)中設(shè)置字體的方法有很多種关贵,下面為大家介紹比較常用的三種方法 1.使用系統(tǒng)默認(rèn)提供的字體 系統(tǒng)默認(rèn)提供的...
    默默_David閱讀 9,235評(píng)論 0 2
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件卖毁、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評(píng)論 4 62
  • 盡量去認(rèn)識(shí)世界的真實(shí)性揖曾,因?yàn)槟悴荒芤恢鄙钤谝粋€(gè)想象的世界里。 真實(shí)地活亥啦,讓我們更賦有活力炭剪。 今天晨...
    丁香的故事閱讀 253評(píng)論 0 0
  • 魯先圣,中國(guó)作家協(xié)會(huì)會(huì)員翔脱,教育部十一五課題組文學(xué)專家奴拦,中國(guó)書畫藝術(shù)研究院山東分院副院長(zhǎng),魯先圣書院院長(zhǎng)届吁,《持續(xù)地敲...
    魯先圣閱讀 1,504評(píng)論 2 5
  • 中午大伙聚在會(huì)議室吃飯瓷产,大伙聊到了自己第一份工作的感悟站玄。在這些老油條面前,我參加工作的年限只能算是職場(chǎng)小白濒旦。 作為...
    向行閱讀 273評(píng)論 2 2