Question

J'essayais d'afficher du texte dans un contexte Quartz, mais peu importe ce que j'ai essayé, je n'ai simplement pas eu la chance d'obtenir le texte à afficher (je suis en mesure d'afficher toutes sortes d'autres objets Quartz ). Quelqu'un sait ce que je peux faire de mal?

exemple:

-(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);
}    
Était-ce utile?

La solution

Voici un fragment de code que j'utilise.

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

Et:

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];
}

Autres conseils

OK, je l’ai compris. Commencez par changer votre mode de codage en kCGEncodingMacRoman. Deuxièmement, insérez cette ligne en dessous:

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

Ceci définit la matrice de conversion pour le texte afin qu’il soit dessiné correctement. Si vous ne mettez pas cette ligne, votre texte sera à l'envers et à l'envers. Aucune idée pourquoi ce n'était pas le défaut. Enfin, assurez-vous que vous avez défini la bonne couleur de remplissage. Si vous oubliez de passer de la couleur de fond à la couleur du texte, vous commettez une erreur facile et vous retrouvez un texte blanc sur blanc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top