核心文本:CTLineGetGlyphRuns 为 SceneDelegate 项目渲染奇怪

问题描述

使用 Core Text 实现这样的效果

444

我有这样的数据,

  • NSAttributedString(string: "郑",attriOne)

  • NSAttributedString(string: "郑和 郑重",attriTwo)

所以我应该有两个 CTRun。

在没有 SceneDelegate(旧时代)的项目中,我得到了两个 CTRun。

在带有 SceneDelegate 的项目中,我得到了 5 个 CTRun。

下面的代码有效,我不知道为什么?

   let bggrip = UIImage(named: "xxx")


    func drawPairs(context ctx: CGContext,ln line: CTLine,startPoint lineOrigin: CGPoint,ascent lineAscent: CGFloat){
        if let pieces = CTLineGetGlyphRuns(line) as? [CTRun]{
            let pieceCnt = pieces.count
            var zeroP = lineOrigin
            for j in 0..<pieceCnt{
                switch j {
                case 0:
                    var frame = TextContentConst.bgImgFrame
                    frame.origin.y = lineOrigin.y + lineAscent - TextContentConst.bgImgFrame.size.height + TextContentConst.offsetP.y
                    // draw image
                    bggrip?.draw(in: frame)
                    zeroP.x += TextContentConst.offsetP.x
                case 1:
                    zeroP.x = 92
                default:
                    ()
                }
                ctx.textPosition = zeroP
                // draw text
                CTRunDraw(pieces[j],ctx,CFRange(location: 0,length: 0))
            }
        }
    }

对于 1...5 CTRun,ctx.textPosition.x = 92,

但实际的字形效果很好,不像我设置的那样。

为什么?

github repo

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...