2015-05-24 2 views
1

Я использую CGContextSetShadowWithColor и основную графику для рисования затененного текста. Появляется тень, но она также кажется «грязной» фактическим текстом, который бросает тень (которая должна быть чистой белой). Это похоже на то, что он отличает тень поверх текста (но не совсем).CGContextSetShadowWithColor помещает тени поверх текста, отбрасывающего тень

Как это:

Muddy text created with CGContextSetShadowWithColor

Если я перерисовывать текст в том же положении, с затенение прочь, я могу переписать мутный текст с чистым белым текстом, так это работа вокруг, но я Мне интересно:

Я делаю что-то неправильно или это ошибка?

let shadowOffset : CGSize = CGSize (width: 4, height: 4) 

    UIGraphicsBeginImageContextWithOptions(CGSize(width: 800, height: 200), false, 1.0) 
    let ctx = UIGraphicsGetCurrentContext() 

    CGContextTranslateCTM(ctx, 0, 200); 
    CGContextScaleCTM(ctx, 1.0, -1.0); 

    CGContextSetAlpha(ctx, 1.0) 
    CGContextSetShadowWithColor(ctx, shadowOffset, 5, UIColor(red: 0, green: 0, blue: 0, alpha: 0.5).CGColor) 

    CGContextSetAllowsAntialiasing (ctx, true) 

    let attr:CFDictionaryRef = [ 
     NSFontAttributeName : UIFont(name: fontName, size: fontSize)!, 
     NSForegroundColorAttributeName:UIColor.whiteColor()] 

    let line = CTLineCreateWithAttributedString(CFAttributedStringCreate(nil, "1234567890", attr)) 

    let bounds = CTLineGetBoundsWithOptions(line, CTLineBoundsOptions.UseOpticalBounds) 

    CGContextSetLineWidth(ctx, 1) 
    CGContextSetTextDrawingMode(ctx, kCGTextFillStroke) 

    CGContextSetTextPosition(ctx, 100.0, 100.0) 
    CTLineDraw(line, ctx) 

    //Uncomment to clean-up text 
    //CGContextSetShadowWithColor(ctx, shadowOffset, 0, nil) 
    //CGContextSetTextPosition(ctx, 100.0, 100.0) 
    //CTLineDraw(line, ctx) 
    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return image 

ответ

2

При звонке в CGContextSetTextDrawingMode, установите режим рисования на kCGTextFill. Насколько я понимаю, тень, которую вы видите, вызывается штрихом текста.

+0

Именно так. Мой штрих и заливка имеют один и тот же цвет, поэтому это не имеет значения. Пробовал разные цвета, и, похоже, он не работал. – rghome

 Смежные вопросы

  • Нет связанных вопросов^_^