Comment afficher du texte à l'aide de Quartz sur l'iPhone?
-
02-07-2019 - |
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);
}
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.