文字无法在框架中正确缩放

时间:2019-08-10 14:14:32

标签: ios swift text core-graphics

我正在制作一个流程图应用程序,在缩放包含文本的形状时遇到了问题。

取决于比例值,字符串的相对宽度会发生变化:

等级6.0:scale 6.0 比例尺1.0: scale 1.0 比例0.5: scale 0.5

文本区域类具有属性logFontSize,它表示恒定的字体大小(在这种情况下为12.0)。

缩放功能(zoomVal是新的缩放比例):

func zoom(zoomVal: CGFloat){
    let newSize = self.logFontSize*zoomVal
    self.attributes![NSAttributedString.Key.font] = (self.attributes![NSAttributedString.Key.font] as! UIFont).withSize(newSize)
    self.attributedString?.setAttributes(self.attributes, range: NSRange(location: 0, length: self.text!.count))
}

我也检查过:比例值与框架矩形(红色)高度和字符串高度(capHeight,lineHeight等)之间的关系之间没有关联。

如何缩放文本,以使其宽度与框架的宽度之间的关系保持恒定?

1 个答案:

答案 0 :(得分:0)

此功能可提高可读性。大小和填充等文本度量标准没有简单的线性关系。它们以各种方式进行了各种调整,以各种大小进行调整,并以特定于字体的方式进行调整,以使文本易于阅读。

如果要线性缩放文本,则应渲染文本,然后缩放绘制图层。对于您的用例,最好的方法可能是用CAShapeLayers组成一个静态CATextLayer,然后应用CAAffineTransform整个容器CALayer来调整其大小。这样可以使缩放平滑,并且性能更高。