Я рисую текст поверх сплошного цвета фона, и пока он появляется, эффект , применяемый к атрибутной строке, не отображается - вы можете видеть только цвет текста, а не дополнительный белый контур, который обеспечивает желаемый внешний вид. Это выглядит по существу точно так же, как если бы я не применял эффект нажатия. Почему это, как я могу правильно нарисовать текст с текстом?Потеря NSTextEffectLetterpressStyle при рисовании в CGBitmapContext
let bitmapContext = CGBitmapContextCreate(nil, UInt(imageRect.width), UInt(imageRect.height), UInt(8), UInt(imageRect.width * 16), CGColorSpaceCreateDeviceRGB(), CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue))
CGContextSetFillColorWithColor(bitmapContext, UIColor.blackColor().CGColor)
let fullBox = CGRectMake(0, 0, imageRect.width, imageRect.height)
CGContextAddRect(bitmapContext, fullBox)
CGContextFillPath(bitmapContext)
CGContextSetTextDrawingMode(bitmapContext, kCGTextFill)
CGContextSetTextPosition(bitmapContext, drawPoint.x, drawPoint.y)
let coloredAttributedString = NSAttributedString(string: "20", attributes:[NSFontAttributeName: myFont, NSForegroundColorAttributeName: textColor, NSTextEffectAttributeName: NSTextEffectLetterpressStyle])
let displayLineTextColored = CTLineCreateWithAttributedString(coloredAttributedString)
CTLineDraw(displayLineTextColored, bitmapContext)
let cgImage = CGBitmapContextCreateImage(bitmapContext)
var myImage = CIImage(CGImage: dateStampCGImage)
Это результат:
Это то, что я ожидал, что это будет (обратите внимание на бело-иш контур):
Спасибо Кен, я использовал графический контекст, чтобы получить этот эффект, но это более интенсивно для памяти, чем использование растрового контекста. В этом случае мне нужна высокая производительность. Вы видите, что любое другое решение избегает использования графического контекста? – Joey
Они оба графические контексты. Как вы определили, что интенсивность памяти больше, чем другая? –
Вы также можете иметь рендеринг UIKit в контексте растрового изображения Core Graphics, нажав его с помощью 'UIGraphicsPushContext()'. Важно то, что UIKit имеет неявный «текущий» контекст, используемый его операциями рисования. Итак, если вы хотите использовать рисунок UIKit, вам нужно учесть, что его текущий контекст является одним из ваших. –