Вопрос по ios – Как я мог обрисовать текстовый шрифт?

6

Я хотел бы отображать текст с другим цветом на его границе (контур). я пытаюсь отобразить текст в MapOverlayView, используя

<code>[text drawAtPoint:CGPointMake(0,30) withFont:[UIFont fontWithName:@"Helvetica-Bold" size:(3 * MKRoadWidthAtZoomScale(zoomScale))] 
</code>

он работает нормально, за исключением того, что мне нужен текст для отображения контуров

Ваш Ответ

2   ответа
0

drawAtPoint:withFont: устарела. Я смог заставить его работать со следующим кодом:

CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat fontSize = 18.0;
CGPoint point = CGPointMake(0, 0);

UIFont *font = [UIFont fontWithName:@"Arial-BoldMT" size:fontSize];
UIColor *outline = [UIColor whiteColor];
UIColor *fill = [UIColor blackColor];

NSDictionary *labelAttr = @{NSForegroundColorAttributeName:outline, NSFontAttributeName:font};

CGContextSetTextDrawingMode(context, kCGTextStroke);
CGContextSetLineWidth(context, 2.0);
[text drawAtPoint:point withAttributes:labelAttr];

CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextSetLineWidth(context, 2.0);
labelAttr = @{NSForegroundColorAttributeName:fill, NSFontAttributeName:font};
[text drawAtPoint:point withAttributes:labelAttr];
8

CGContextSetDrawingMode(CGContextRef, CGTextDrawingMode)хотя вам, вероятно, потребуется настроить некоторые цифры и цвета, чтобы они выглядели хорошо.

Кажется логичным использовать kCGTextFillStroke, но это может привести к тому, что штрих переполняет заливку. Если вы нажмете, затем заполните, как в блоке ниже, вы получите видимый контур позади читаемого текста.

CGContextRef context = UIGraphicsGetCurrentContext();

CGPoint point = CGPointMake(0,30);
CGFloat fontSize = (3 * MKRoadWidthAtZoomScale(zoomScale));
UIFont *font = [UIFont fontWithName:@"Helvetica-Bold" size:fontSize];

// Draw outlined text.
CGContextSetTextDrawingMode(context, kCGTextStroke);
// Make the thickness of the outline a function of the font size in use.
CGContextSetLineWidth(context, fontSize/18);
CGContextSetStrokeColorWithColor(context, [[UIColor redColor] CGColor]);
[text drawAtPoint:point withFont:font];

// Draw filled text.  This will make sure it's clearly readable, while leaving some outline behind it.
CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextSetFillColorWithColor(context, [[UIColor blueColor] CGColor]);
[text drawAtPoint:point withFont:font];
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded user836026

Похожие вопросы