Рисование строки и рендеринг - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь нарисовать глиф поверх другого глифа, который служит фоном, нижние / более глубокие символы глифа немного полнее, чем самые верхние глифы.

Эти фоновые глифы обычно отображаются белым и служат в качестве маски, чтобы скрыть фоновые линии, которые в противном случае могли бы врезаться в текст.

По какой-то причине, поскольку IOS 10 самые верхние глифы теперь нечеткие.

Есть ли какие-то новые настройка для предотвращения этого?

Изображения ниже:

  1. Без фона Глиф
  2. С фоновым глифом (раньше работал IOS 10)
  3. Фоновый глиф красного цвета 4 Глиф с вторгающейся линией для маскировки

none

With background Glyph

Background shown in red

enter image description here

func drawLabelGlyph(label:String, placement:CGPoint, size:CGFloat, width:CGFloat, horizontalOffset:CGFloat, fontColor:UIColor){

    let paragraphStyle = NSMutableParagraphStyle() //20 size
    paragraphStyle.alignment = .center



    let attrs = [
        NSAttributedString.Key.font: UIFont(name: ThemeManager.currentTheme().fontChart, size: size)!,
        //NSFontAttributeName: UIFont.systemFont(ofSize: 12.0),
        NSAttributedString.Key.paragraphStyle: paragraphStyle,
        //NSBackgroundColorAttributeName : _labelForegroundBack,
        NSAttributedString.Key.foregroundColor: fontColor
    ]



    let resizeFactor = CGFloat(0.2)
    let height = size * (1 + resizeFactor)//1.2 //20 > 24
    let vertOffSet:CGFloat = -1 * (size / 2 + size * resizeFactor)
    let horizOffSet:CGFloat = width / -2 // -10

    label.draw(
        with: CGRect(x: (placement.x + horizOffSet), y: (placement.y + vertOffSet), width: width, height: height),
        options: .usesLineFragmentOrigin,
        attributes: attrs,
        context: nil)

}

func drawLabelGlyph(label:String, placement:CGPoint, size:CGFloat, width:CGFloat, horizontalOffset:CGFloat){
    var fontColor = _fontColor

    drawLabelGlyph(label:label, placement:placement, size:size, width:width, horizontalOffset:horizontalOffset, fontColor:fontColor)

}

func drawLabelGlyphBK(label:String, placement:CGPoint, size:CGFloat, width:CGFloat, horizontalOffset:CGFloat){
    let paragraphStyle = NSMutableParagraphStyle() //20 size
    paragraphStyle.alignment = .center
    let attrs = [
        //NSFontAttributeName: UIFont(name: ThemeManager.currentTheme().fontChart, size: size)!,  //Background
        NSAttributedString.Key.font: UIFont(name: ThemeManager.currentTheme().fontChartBackground, size: size)!,  //Background
        NSAttributedString.Key.paragraphStyle: paragraphStyle,
        NSAttributedString.Key.backgroundColor : _labelBackgroundBack,
        NSAttributedString.Key.foregroundColor : _labelBackgroundFore

    ]

    let resizeFactor = CGFloat(0.2)
    let height = size * (1 + resizeFactor)//1.2 //20 > 24
    let vertOffSet:CGFloat = -1 * (size / 2 + size * resizeFactor)
    let horizOffSet:CGFloat = width / -2 // -10


    label.draw(
        with: CGRect(x: (placement.x + horizOffSet), y: (placement.y + vertOffSet), width: width, height: height),
        options: .usesLineFragmentOrigin,
        attributes: attrs,
        context: nil)
}
...