iPhone에서 Custom font 쓰는 법
( test.ttf라는 폰트를 사용할 때 )
1. 폰트파일을 xcode 프로젝트로 긁어 넣는다.
2. 아래와 같은 방식으로 메모리 로딩 후 사용한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"ttf"]; CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([fontPath UTF8String]); CGFontRef _cgFont = CGFontCreateWithDataProvider(fontDataProvider); CGDataProviderRelease(fontDataProvider); CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetFont(context, _cgFont); CGContextSetFontSize(context, 20); CGAffineTransform transform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0); CGContextSetTextMatrix(context, transform); NSString *str = @"Hello? 안녕?"; CGGlyph _glyphs[[str length]]; unichar _chars[[str length]]; int i; for(i = 0; i < [str length]; i++) { _chars[i] = [str characterAtIndex:i]; } CGFontGetGlyphsForUnichars(_cgFont, _chars, _glyphs, [str length]); CGContextShowGlyphsAtPoint(context, 0, 20, _glyphs, [str length]); CGFontRelease(_cgFont); |
위에서 CGFontGetGlyphsForUnichars는 헤더파일에도 선언되지않은 함수라서 warning이 나올 수 있다.
따라서, 아래와 같이 선언을 해두면 warning이 나오지 않는다.
bool CGFontGetGlyphsForUnichars(CGFontRef, unichar[], CGGlyph[], size_t);
문자색을 지정할 때는 위의 예제와 같이 CGContextSetFillColorWithColor로 선언하며, 이 때 사용이 간편한 UIColor를 사용하여 CGColorRef를 사용하는 것이 좋다.
저는 일단, FontManager란걸 만들어놓고, AppDelegate에서 한번에 로딩해서 쓰는 방식으로 해서,
UIView, UITextView, UITableViewCell등에서 사용해본 결과 만족할 만 했습니다.
다만, 저, CGFontGetGlyphsForUnichars란 함수가 언제까지 남아있을 지가 문제죠.
지금 만들고 있는 어플중 스크린샷을 해봤습니다.