iOS: CGContext SetTextDrawingMode Различные символы Причина Сбой / Нет текста нарисован

Я использую эти функции для рисования текста поверх изображения:

char* text = (char *)[text1 cStringUsingEncoding:NSASCIIStringEncoding];
CGContextSelectFont(context, "Helvetica", fontSize, kCGEncodingMacRoman);
CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextSetRGBFillColor(context, 0.0, 0.1, 0.1, 1);
CGContextShowTextAtPoint(context, 5, 20, text, strlen(text));

Он отлично работает, за исключением случаев, когда у меня есть такие символы, как "ü", "ö", "ä" и т. Д. С strlen - это вызовет сбой. Поэтому я попытался получить длину строки, используя это перед этой строкой

char* text = (char *)[text cStringUsingEncoding:NSASCIIStringEncoding];
by doing this:
int length = [text length];
and then replace strlen(text) with length.

это не вызывает сбой, но текст не рисуется. Я думаю, что виновником здесь являются персонажи. Я пробовал оба

kCGEncodingMacRoman
kCGEncodingFontSpecific

но ничего не помогло. Можете ли вы мне с этим? Благодарю.

ОБНОВЛЕНО: @Martin R:

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, 90.0f, 90.0f, 8, 4 * 90.0f, colorSpace,     kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(context, CGRectMake(0, 0, 90.0f, 90.0f), img.CGImage);

CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextSetRGBFillColor(context, 0.8, 0.1, 0.1, 1);
[text1 drawAtPoint:(CGPoint){5, 20} withFont:[UIFont fontWithName:@"Helvetica" size:10.0f]];
CGImageRef finalImage = CGBitmapContextCreateImage(context);

CGContextRelease(context);
CGColorSpaceRelease(colorSpace);

UIImage *image = [UIImage imageWithCGImage:finalImage];
CGImageRelease(finalImage);

return image;

1 ответ

Решение

CGContextShowTextAtPoint() интерпретирует данный текст в соответствии с указанным параметром кодирования CGContextSelectFont(), который является Mac Roman в вашем случае. Таким образом, вы должны преобразовать строку с помощью

NSString *string = @"äöü";
const char *text = [string cStringUsingEncoding:NSMacOSRomanStringEncoding];

В качестве альтернативы, вы можете использовать drawAtPoint:withFont: метод NSString, который обрабатывает символы Unicode автоматически:

NSString *string = @"äöü€";
[string drawAtPoint:CGPointMake(5, 20) withFont:[UIFont fontWithName:@"Helvetica" size:12]];
Другие вопросы по тегам