CTFontGetGlyphsForCharacters总是返回false
请帮我理解下面的代码的问题:
NSString *fontName = @"ArialMT"; CGFloat fontSize = 20.0; CTFontRef fontRef = CTFontCreateWithName((CFStringRef)fontName, fontSize, NULL); NSString *characters = @"ABC"; NSUInteger count = characters.length; CGGlyph glyphs[count]; if (CTFontGetGlyphsForCharacters(fontRef, (const unichar*)[characters cStringUsingEncoding:NSUTF8StringEncoding], glyphs, count) == false) NSLog(@"*** CTFontGetGlyphsForCharacters failed.");
任何帮助表示赞赏。
您将得到一个包含UTF-8编码字符的Cstring,然后将其转换为unichar *
。 这是行不通的。 unichar
是一个16位的UTF-16编码的字符。 一个简单的C语言转换将不会转换字符编码。
你需要把它的string作为一个unichar
数组:
NSString *fontName = @"ArialMT"; CGFloat fontSize = 20.0; CTFontRef fontRef = CTFontCreateWithName((CFStringRef)fontName, fontSize, NULL); NSString *string = @"ABC"; NSUInteger count = string.length; unichar characters[count]; [string getCharacters:characters range:NSMakeRange(0, count)]; CGGlyph glyphs[count]; if (CTFontGetGlyphsForCharacters(fontRef, characters, glyphs, count) == false) NSLog(@"*** CTFontGetGlyphsForCharacters failed.");