2008-09-27 7 views
7

He intentado mostrar texto usando un contexto de Cuarzo, pero no importa lo que haya intentado, simplemente no he tenido suerte para mostrar el texto (sin embargo, puedo mostrar todo tipo de otros objetos de Cuarzo) . ¿Alguien sabe lo que podría estar haciendo mal?¿Cómo mostrar texto usando Quartz en el iPhone?

ejemplo:

-(void)drawRect:(CGRect)rect 
{ 
    // Drawing code 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSelectFont(context, "Arial", 24, kCGEncodingFontSpecific); 
    CGContextSetTextPosition(context,80,80); 
    CGContextShowText(context, "hello", 6); 
    //not even this works 
    CGContextShowTextAtPoint(context, 1,1, "hello", 6); 
}  

Respuesta

7

Aquí es un fragmento de código que estoy usando.

UIColor *mainTextColor = [UIColor whiteColor]; 
[mainTextColor set]; 
drawTextLjust(@"Sample Text", 8, 50, 185, 18, 16); 

Y:

static void drawTextLjust(NSString* text, CGFloat y, CGFloat left, CGFloat right, 
          int maxFontSize, int minFontSize) { 
    CGPoint point = CGPointMake(left, y); 
    UIFont *font = [UIFont systemFontOfSize:maxFontSize]; 
    [text drawAtPoint:point forWidth:right - left withFont:font 
     minFontSize:minFontSize actualFontSize:NULL 
     lineBreakMode:UILineBreakModeTailTruncation 
     baselineAdjustment:UIBaselineAdjustmentAlignBaselines]; 
} 
+0

Debe ser @ "Texto de muestra" ya que la función espera un NSString *. A mí me funciona de otra manera, gracias. Sin embargo, no puedo encontrar referencia a la función drawAtPoint, lo cual es preocupante. – CiscoIPPhone

+1

drawAtPoint es parte de la categoría UIKit NSString - http://developer.apple.com/library/ios/#documentation/uikit/reference/NSString_UIKit_Additions/Reference/Reference.html – Hunter

9

OK, lo tengo. Primero, cambie su modo de codificación a kCGEncodingMacRoman. En segundo lugar, insertar esta línea por debajo de ella:

CGContextSetTextMatrix(canvas, CGAffineTransformMake(1, 0, 0, -1, 0, 0)); 

Esto ajusta la matriz de conversión para el texto de manera que se extrae correctamente. Si no pones esa línea, tu texto estará boca abajo y de atrás para adelante. No tengo idea de por qué esto no era el predeterminado. Finalmente, asegúrate de haber establecido el color de relleno correcto. Es un error fácil de realizar si olvida cambiar el color del fondo al color del texto y termina con el texto blanco sobre blanco.

+1

No es el valor predeterminado porque esta función - y todas Quartz: funciona exactamente igual en iOS que en OS X para la portabilidad, pero por alguna razón invirtieron el sistema de coordenadas [predeterminado] para todo el sistema en iOS. En la Mac (0, 0) está abajo a la izquierda, en iOS está arriba a la izquierda. Si estuvieras portando código Mac, deberías invertir y reposicionar el sistema de coordenadas una sola vez antes de hacer todo tu código, en lugar de pensar en ello para cada primitiva. – Tommy

Cuestiones relacionadas