Как отобразить текст с помощью Quartz на iPhone?
-
02-07-2019 - |
Вопрос
Я пытался отобразить текст, используя контекст Quartz, но независимо от того, что я пробовал, мне просто не повезло с отображением текста (хотя я могу отображать все виды других объектов Quartz).Кто-нибудь знает, что я, возможно, делаю не так?
пример:
-(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);
}
Решение
Вот фрагмент кода, который я использую.
UIColor *mainTextColor = [UIColor whiteColor];
[mainTextColor set];
drawTextLjust(@"Sample Text", 8, 50, 185, 18, 16);
И:
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];
}
Другие советы
Ладно, я понял.Прежде всего, измените режим кодирования на kCGEncodingMacRoman.Во-вторых, вставьте под ним эту строку:
CGContextSetTextMatrix(canvas, CGAffineTransformMake(1, 0, 0, -1, 0, 0));
Это устанавливает матрицу преобразования текста таким образом, чтобы он отображался правильно.Если вы не вставите эту строку, ваш текст будет перевернут задом наперед.Понятия не имею, почему это не было сделано по умолчанию.Наконец, убедитесь, что вы установили правильный цвет заливки.Легко совершить ошибку, если вы забудете сменить цвет фона на цвет текста и в итоге получите текст белым по белому.