iphone - simbolo - Carácter Unicode que no se muestra
caracter indio iphone copiar (4)
Quiero mostrar el símbolo "infinito" usando
CGContextSelectFont(context, "HelveticaNeue", textSize, kCGEncodingMacRoman);
CGContextShowTextAtPoint(context, myCenter.x, myCenter.y + textHeight, [sName cStringUsingEncoding:NSMacOSRomanStringEncoding], [sName length]);
Se muestra como un cuadro cuadrado o un círculo. Descubrí que este símbolo está en el decimal 176 y 221E en formato hexadecimal. Estoy usando Helvetica como mi fuente, y he intentado con otros sin suerte. ¿Esto es un problema con la codificación que estoy usando?
Resulta que CGContextSelectFont solo es compatible con la codificación MacRoman, que básicamente tiene solo un pequeño conjunto de caracteres. Para mostrar caracteres Unicode en una cadena, debe usar CGSetFont o el sistema de dibujo Cocoa. CGSetFont requiere que uses Cocoa de todos modos para asignar caracteres a glifos y luego dibujar los glifos usando CGContextShowGlyphsAtPoint. Te recomiendo que busques otras formas de dibujar estas cadenas si realmente necesitas mostrar los caracteres Unicode.
Este código básicamente mostrará el símbolo de infinito:
- (void)drawRect:(CGRect)rect {
unichar inf = 0x221E; // infinity symbol
NSString* sName = [[NSString alloc] initWithCharacters:&inf length:1];
UIFont* font = [UIFont fontWithName:@"Helvetica" size:32.0];
[sName drawInRect:CGRectMake(20, 20, 40, 40)
withFont:font];
[sName release];
}
También tenga en cuenta que en el iPhone (y en la Mac), Helvetica Neue en realidad no existe ... su nombre simplemente vuelve a la Helvetica estándar. Consulte la tabla en http://daringfireball.net/misc/2007/07/iphone-osx-fonts para obtener más información sobre las fuentes disponibles en el iPhone.
Vale la pena señalar que aún puede usar las funciones de CGContext al costado - [NSString drawWithRect:] y sus primos. Por ejemplo, el siguiente código dibuja una cadena (que puede incluir cualquier carácter, incluido el símbolo de infinito que inició este hilo) con 50% de negro opaco:
CGContextSaveGState(context);
CGContextSetRGBFillColor(context, 0, 0, 0, 0.5);
[self.text drawInRect:targetRect withFont:self.font];
CGContextRestoreGState(context);
Desea evitar drawInRect: withFont: (en MonoTouch: DrawString (cadena, RectangelF, fuente UIFont) como esta API hasta que iPhoneOS 4.0 no represente cadenas que puedan contener ciertos caracteres Unicode (como dingbats) y silenciosamente cortará la representación en ese punto .
En su lugar, debe usar drawInRect: withFont: lineBreakMode: alignment: (en MonoTouch este es el método DrawString (string msg, RectangleF rect, UIFont font, UILineBreakMode breakMode, UITextAlignment align)) ya que se representa correctamente.
Además, no todas las fuentes en el iPhone son un conjunto completo de fuentes, puede usar la siguiente referencia:
http://daringfireball.net/misc/2007/07/iphone-osx-fonts
Para obtener una lista de fuentes que tienen el conjunto completo de caracteres.
Aquí está la respuesta MonoTouch:
UIGraphics.PushContext (mBmpContext);
mBmpContext.SetRGBFillColor(1f,1f,1f,1f);
var font = UIFont.FromName ("Arial", 30);
using (var nsstr = new NSString ("äöü ÜÖÄ")){
nsstr.DrawString (new PointF (10, 400), font);
}
UIGraphics.PopContext ()