ios:CGContextRef 渲染中文问题
2014-04-27 23:35
309 查看
1.项目中遇到drawRect来渲染中文,但是调用CGContextShowTextAtPoint方法失败,于是查了些资料整理总结一下
2.既然apple能显示中文,那么自然也是支持中文的。
查看所有字体:
其中就有两个中文字体:
-----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框架
代码如下
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 font CGFloat s = 18; CTFontRef ctfont = CTFontCreateWithName(CFSTR("STHeitiSC-Medium"), s, NULL); CGColorRef ctColor = [[UIColor greenColor] CGColor]; // Create an attributed string CFStringRef 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
相关文章推荐
- iOS 中json解析数据出现中文乱码的问题
- IOS学习之路二十(程序json转换数据的中文字符问题解决)
- IOS CGContextRef画图小结
- linux下chromium/chrome中文字体粗体渲染问题
- 利用预渲染解决优化性能问题IOS
- iOS开发之--避免离屏渲染(圆角问题)
- MarkdownPad2中文破解版下载安装,并解决HTML渲染组件出错的问题
- 密码中有特殊的字符IOS如何处理 IOS中URL包含中文参数的问题
- 解决 iOS NSDictionary 输出中文字符”乱码”(Unicode编码)问题
- IOS-关于第三方解压库ZipArchive解压后中文乱码问题
- iOS CGContextRef画图小结
- iOS中解决Xcode9的Log日志无法输出中文的问题小结
- 密码中有特殊的字符IOS如何处理 IOS中URL包含中文参数的问题
- 【iOS】检测textView输入时,中文输入法的产生的问题
- iOS 文件下载 (AFNetwork 三方框架 文件名中文字符乱码问题解决)四
- jquery Autocomplete 在ios上 中文兼容性问题
- iOS 中json解析数据出现中文乱码的问题
- iOS开发中,textview中文输入有联想的时候,字数限制问题
- iOS CGContextRef详解与使用
- IOS 6.0 下 在输入中文时 按下锁屏键 导致的闪退问题