如何通过像素化纠正UIView和UILabel文本缩放?

use*_*509 5 optimization uiview ios catextlayer swift

当我向a添加一个UILabel带文本UIView然后缩放时UIView,内容将以像素化方式显示.比例因子越大,像素化越大.

我理解使用一个CATextLayer可能能够协助,并可以显示缩放UIViewUILabel文本没有像素化,但我不知道如何实现它.

这就是我创建一个三角形并在没有像素化的情况下缩放它的方法.它具有完美的锋利边缘.

在缩放时如何确保相同UILabel

func drawTriangle() {
    let path = UIBezierPath()
    path.moveToPoint(CGPoint(x: 0, y: 100))
    path.addLineToPoint(CGPoint(x: 100, y: 100))
    path.addLineToPoint(CGPoint(x: 50, y: 0))
    path.closePath()

    let shape = CAShapeLayer()
    shape.path = path.CGPath
    shape.fillColor = UIColor.blackColor().CGColor

    viewTriangle.layer.insertSublayer(shape, atIndex: 0)
}

func scaleTriangle() {
    viewTriangle.transform = CGAffineTransformMakeScale(5, 5)
}
Run Code Online (Sandbox Code Playgroud)

题:

在Swift代码中,如何将下面的代码转换为使用a,CATextLayer以便在没有像素化的情况下进行缩放?


问题代码:

func drawLetter() { // pixelated when scaled ?
    let labelLetter = UILabel(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
    labelLetter.text = "A"
    labelLetter.backgroundColor = UIColor.clearColor()
    labelLetter.textColor = UIColor.blackColor()
    labelLetter.font = UIFont(name: labelLetter.font.fontName, size: 144)
    labelLetter.textAlignment = .Center
    viewLetter.addSubview(labelLetter)
    }
}

func scaleView() {
    let scaleValue: CGFloat = 5
    self.viewLetter.transform = CGAffineTransformMakeScale(scaleValue, scaleValue)
}
Run Code Online (Sandbox Code Playgroud)

图片:

在此输入图像描述

mat*_*att 1

据我了解,使用 CATextLayer 使用路径进行绘图,并将显示缩放后的 UIView 和 UILabel 文本,而不会出现像素化。

你理解错了。CATextLayer绘制文本并缩放文本。这是一个非此即彼的事情:使用 CATextLayerUILabel。

在缩放视图中很容易获得更多细节:这就是视图的用途contentScaleFactor。只需增加它,考虑到由于屏幕分辨率而产生的现有比例,以匹配您的比例变换。

  • 你好,@Matt,我问了一个非常具体的 Swift 问题,你给出了一个不完整的答案,其中含糊地提到了 contentScaleFactor,你不会详细说明。您随后在一本 Objective C 书中找到了一个非常广泛的主题(而不是答案)的链接,该书链接到您创作并正在推广的付费书籍,在您在 StackOverflow 上发布的许多其他答案中都可以看到,请参阅 https://www .google.com/search?q=%22apeth.com%2FiOSBook%22+site%3Astackoverflow.com。请原谅,但这是不合适的。请尝试帮助您集中回答问题,或者不要向 StackOverflow 发送垃圾邮件。 (2认同)