iOS自訂字型

來源:互聯網
上載者:User

標籤:

從本地讀取字型 並註冊 

讀取方法一 :

+ (instancetype)customFont:(CGFloat)fontSize{    NSString *fontPath = [[NSBundle mainBundle]pathForResource:@"regular" ofType:@"otf"];    NSData *dynamicFontData = [NSData dataWithContentsOfFile:fontPath];    if (!dynamicFontData){        return [self customFont:fontSize];//系統內建字型    }    CFErrorRef error;    CGDataProviderRef providerRef = CGDataProviderCreateWithCFData((__bridge CFDataRef)dynamicFontData);    CGFontRef newFont = CGFontCreateWithDataProvider(providerRef);    CFStringRef fontName = CGFontCopyFullName(newFont);    NSString *fontNameString = (__bridge id)(fontName);    if ( ![self isResisted:fontNameString] && ! CTFontManagerRegisterGraphicsFont(newFont, &error)){        //註冊失敗        CFStringRef errorDescription = CFErrorCopyDescription(error);        DDLog(@"自訂字型註冊失敗: %@", errorDescription);        CFRelease(errorDescription);    }        CFRelease(newFont);    CFRelease(providerRef);    CFRelease(fontName);        UIFont *fone = [UIFont  fontWithName:fontNameString size:fontSize];    if (!fone){        fone = [self customFont:fontSize];//系統內建字型    }    return fone;}

讀取方法二 (參考http://www.xuebuyuan.com/2189874.html) :

NSString *fontPath = [[NSBundle mainBundle] pathForResource:fontFileNameArray[i] ofType:nil];  NSURL *url = [NSURL fileURLWithPath:fontPath];    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)url);  if (fontDataProvider == NULL)  {      break;  }    CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);  CGDataProviderRelease(fontDataProvider);  if (newFont == NULL)  {      break;  }  CFStringRef fontName = CGFontCopyFullName(newFont);    NSString *fontNameString = (__bridge id)(fontName);  if ([fontNameString isEqualToString:@"Yuppy SC Regular"]) {      fontNameString = @"YuppySC-Regular";  }  [fontNameMDic setObject:fontNameString forKey:fontFileNameArray[i]];    CFRelease(fontName);  CGFontRelease(newFont);  

讀取方法三(參考http://www.cnblogs.com/vicstudio/p/3961195.html):

-(UIFont*)customFontWithPath:(NSString*)path size:(CGFloat)size{    NSURL *fontUrl = [NSURL fileURLWithPath:path];    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL((__bridge CFURLRef)fontUrl);    CGFontRef fontRef = CGFontCreateWithDataProvider(fontDataProvider);    CGDataProviderRelease(fontDataProvider);    CTFontManagerRegisterGraphicsFont(fontRef, NULL);    NSString *fontName = CFBridgingRelease(CGFontCopyPostScriptName(fontRef));    UIFont *font = [UIFont fontWithName:fontName size:size];    CGFontRelease(fontRef);    return font;}

以上三種方法可以讀取ttf,otf 格式字型,但是方法一、二發現有時會有讀取不到的情況,讀取不到的原因是fontNameString 擷取錯誤,方法一有時擷取到的fontNameString是Yuppy SC Regular 但是實際的fontNameString  是 YuppySC-Regular,方法二的缺點是要事Crowdsourced Security Testing道fontNameString。方法三還沒有發現讀取不到的情況。

 方法一、二擷取字型名的方法是:CGFontCopyFullName 方法三取字型名的方法是CGFontCopyPostScriptName,方法一 二擷取的FullName,iOS用的是PostScriptName

 

TTC字型的讀取方法(見http://www.cnblogs.com/vicstudio/p/3961195.html):

-(NSArray*)customFontArrayWithPath:(NSString*)path size:(CGFloat)size{    CFStringRef fontPath = CFStringCreateWithCString(NULL, [path UTF8String], kCFStringEncodingUTF8);    CFURLRef fontUrl = CFURLCreateWithFileSystemPath(NULL, fontPath, kCFURLPOSIXPathStyle, 0);    CFArrayRef fontArray =CTFontManagerCreateFontDescriptorsFromURL(fontUrl);    CTFontManagerRegisterFontsForURL(fontUrl, kCTFontManagerScopeNone, NULL);    NSMutableArray *customFontArray = [NSMutableArray array];    for (CFIndex i = 0 ; i < CFArrayGetCount(fontArray); i++){        CTFontDescriptorRef  descriptor = CFArrayGetValueAtIndex(fontArray, i);        CTFontRef fontRef = CTFontCreateWithFontDescriptor(descriptor, size, NULL);        NSString *fontName = CFBridgingRelease(CTFontCopyName(fontRef, kCTFontPostScriptNameKey));        UIFont *font = [UIFont fontWithName:fontName size:size];        [customFontArray addObject:font];    }        return customFontArray;}

 

 

以下內容摘自(http://www.cnblogs.com/vicstudio/p/3961195.html)

 

不過這個方法只支援7.0以上,暫時在7.0以下沒有找到方法。

個人看法,因為ttc裡面的字型都比較相似,所以其實使用一個也足以。

 

附:(字型的介紹)

TTF(TrueTypeFont)是一種字型檔名稱。TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字型檔格式,隨著windows的流行,已經變成最常用的一種字型檔表示方式。

TTC字型是TrueType字型整合檔案(. TTC檔案),是在一單獨檔案結構中包含多種字型,以便更有效地共用輪廓資料,當多種字型共用同一筆畫時,TTC技術可有效地減小字型檔的大小。TTC是幾個TTF合成的字型檔,安裝後字型列表中會看到兩個以上的字型。兩個字型中大部分字都一樣時,可以將兩種字型做成一個TTC檔案,常見的TTC字型,因為共用筆劃資料,所以大多這個集合中的字型區別只是字元寬度不一樣,以便適應不同的版面排版要求。 而TTF字型則只包含一種字型。

 

iOS自訂字型

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.