6

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

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

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

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

  • Error: User Rate Limit Exceeded

    от user836026
  • Error: User Rate Limit Exceeded

    от
  • 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];