ios:CGContextRef 渲染中文问题
生活随笔
收集整理的這篇文章主要介紹了
ios:CGContextRef 渲染中文问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.項目中遇到drawRect來渲染中文,但是調用CGContextShowTextAtPoint方法失敗,于是查了些資料整理總結一下
2.既然apple能顯示中文,那么自然也是支持中文的。
查看所有字體:
NSArray *fontFamilies = [UIFontfamilyNames];for(NSString *fontFam in fontFamilies) {NSLog(@"=========%@=========",fontFam);NSArray *fontNames = [UIFontfontNamesForFamilyName:fontFam];for (NSString* fontName in fontNames) {NSLog(@"%@",fontName);} }其中就有兩個中文字體:
-----Heiti SC-----
STHeitiSC-Medium
STHeitiSC-Light
??
-----Heiti TC------
STHeitiTC-Medium
STHeitiTC-Light
這是兩個系統內置的字體族,一個簡體黑體,一個是繁體黑體。這兩個字體族都分別包含中、輕兩種不通字重的字體。
這里感謝@容我博愛的博客,具體可以參照其一篇博客http://blog.sina.com.cn/s/blog_a6b43f6b0101lonr.html
3.字體找到了,然后用CTFontCreateWithName函數來加載,不過要添加CoreText.framework框架
代碼如下
- (void)drawRect:(CGRect)rect {[super drawRect:rect];NSString * sX = @"愛";CGContextRef context = UIGraphicsGetCurrentContext();// Prepare fontCGFloat s = 18;CTFontRef ctfont = CTFontCreateWithName(CFSTR("STHeitiSC-Medium"), s, NULL);CGColorRef ctColor = [[UIColor greenColor] CGColor];// Create an attributed stringCFStringRef keys[] = { kCTFontAttributeName,kCTForegroundColorAttributeName };CFTypeRef values[] = { ctfont,ctColor};CFDictionaryRef attr = CFDictionaryCreate(NULL, (const void **)&keys, (const void **)&values,sizeof(keys) / sizeof(keys[0]), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);CFStringRef ctStr = CFStringCreateWithCString(nil, [sX UTF8String], kCFStringEncodingUTF8);CFAttributedStringRef attrString = CFAttributedStringCreate(NULL,ctStr, attr);CTLineRef line = CTLineCreateWithAttributedString(attrString); // CGContextSetTextMatrix(context, CGAffineTransformIdentity);//因為坐標系的不用,這里要翻轉一下CGContextSetTextMatrix (context, CGAffineTransformMake(1, 0, 0, -1, 0, 0));//CGContextSetTextMatrix(context, CGAffineTransformMakeRotation(3.14));//CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1.0, -1.0)); //Use this one if the view's coordinates are flipped CGContextSetTextPosition(context, s, s);CTLineDraw(line, context);CFRelease(line);CFRelease(attrString);CFRelease(ctStr);// Clean up CFRelease(attr);CFRelease(ctfont); }4.結果如圖
ps:這里涉及到ios應用程序字體定制化的東西,具體細節不是很了解,時間的關系,我對背后的東西沒有深究,待有時間再去學習。上面的代碼有參照@酒歌的博客,
如果有疑問,請移步http://blog.sina.com.cn/s/blog_4b657a0601014blv.html
?
轉載于:https://www.cnblogs.com/yoon/p/3695466.html
總結
以上是生活随笔為你收集整理的ios:CGContextRef 渲染中文问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在ubuntu14.04 64位中使用j
- 下一篇: CCS v5 无法启动解决办法及Laun