teclado romaji para kana japones google descargar celulares iphone unicode cjk cgcontext

romaji - Iphone CGContextShowTextAtPoint para caracteres japoneses



teclado japones google (4)

Estoy trabajando en una aplicación en la que estoy usando CGContextShowTextAtPoint para mostrar texto en la pantalla. También quiero mostrar caracteres japoneses, pero CGContextShowTextAtPoint toma como entrada una cadena C. Entonces, o bien A) ¿Cómo cambio los caracteres japoneses en una cadena C? Si esto no es posible, B) ¿Cómo puedo imprimir caracteres japoneses manualmente en la pantalla (dentro del método drawRect)?

Gracias por adelantado.


Por lo que vale, pasé mucho tiempo intentando que los caracteres japoneses funcionaran bien en CoreGraphics, y no me gustó dónde me dejó.

Al final, cambié a usar UILabels para manejar el texto. Todas las cosas de CoreGraphics que necesitaba se podían replicar usando el soporte de transformación y animación, y al final el código resultante era mucho más simple.

Puede no ser apropiado para su situación, pero vale la pena considerarlo.


Pude hacerlo funcionar usando una reimplementación de CGFontGetGlyphsForUnichars por Jens Egeblad: GlyphDrawing.mm

Primero cargue en una fuente japonesa como un archivo otf del paquete de la aplicación:

// Load font file from otf file NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"HStdNW8" ofType:@"otf"]; CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([fontPath UTF8String]); CGFontRef _cgFont = CGFontCreateWithDataProvider(fontDataProvider); CGDataProviderRelease(fontDataProvider);

Luego puedes convertir tu texto unichar en glifos y dibujarlos:

NSString *text = @"日本語" CGContextSetFont(context, _cgFont); CGContextSetFontSize(context, 12); CGGlyph textGlyphs[[text length]]; unichar textChars[[text length]]; for(int i = 0; i < [text length]; i++) { textChars[i] = [text characterAtIndex:i]; } CMFontGetGlyphsForUnichars(_cgFont, textChars, textGlyphs, [text length]); CGContextShowGlyphsAtPoint(context, xCoord, yCoord, textGlyphs, [text length]);


Esto quizás te ayude a% topic starter%. ¡Gracias a Rhythmic Fistman por un gran consejo!

CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSelectFont (context, [self.font.fontName cStringUsingEncoding:NSASCIIStringEncoding], self.font.pointSize, kCGEncodingMacRoman); CGContextSetCharacterSpacing(context, characterSpacing); CGContextSetFillColorWithColor(context, [self.textColor CGColor]); CGAffineTransform myTextTransform = CGAffineTransformScale(CGAffineTransformIdentity, 1.f, -1.f ); CGContextSetTextMatrix (context, myTextTransform); CGGlyph glyphs[self.text.length]; CTFontRef fontRef = CTFontCreateWithName((CFStringRef)self.font.fontName, self.font.pointSize, NULL); CTFontGetGlyphsForCharacters(fontRef, (const unichar*)[self.text cStringUsingEncoding:NSUnicodeStringEncoding], glyphs, self.text.length); float centeredY = (self.font.pointSize + (self.frame.size.height- self.font.pointSize)/2)-2; CGContextShowGlyphsAtPoint(context, rect.origin.x, centeredY, (const CGGlyph *)glyphs, self.text.length); CFRelease(fontRef);


CoreText puede ayudarlo a:

  1. CTFontGetGlyphsForCharacters (iOS 3.2 en adelante) asigna caracteres Unicode a glifos
  2. CTFontDrawGlyphs (iOS 4.2 en adelante) dibuja los glifos en un CGContext.

NÓTESE BIEN. CGContextShowGlyphs debería funcionar, pero nunca encontré la manera de convertir mis UniChars en glifos. Más sobre eso aquí :

Ancient, pre iOS 3.2 respuesta

necesitas usar UIKit para esto.

Consulte [NSString drawAtPoint:...] para comenzar.

Esta pregunta SO también es útil.

No sé lo que estaban pensando con el texto CoreGraphic, es inútil.