当我向UILabel
添加带有文字的UIView
,然后缩放UIView
时,内容会显示为像素化。比例因子越大,像素化越大。
我知道使用CATextLayer
可以提供帮助,并且可以显示缩放的UIView
和UILabel
文字而不会出现像素化但我不知道如何实现它。
这是我创建三角形并缩放它而没有像素化的方法。它具有完美的锋利边缘。
在缩放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)
}
问题:
在Swift代码中,如何将以下内容转换为使用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)
}
图片:
答案 0 :(得分:1)
我理解使用CATextLayer使用路径进行绘制,并且会显示缩放的UIView和UILabel文本而不会出现像素化。
你理解错了。 CATextLayer 绘制文本并缩放其文本。这是一个或两件事:使用CATextLayer 或一个UILabel。
在缩放视图中获取更多细节很容易:这就是视图PKEY_Devices_Status2
的用途。只需增加它,考虑到屏幕分辨率导致的现有比例,以匹配您的比例变换。
答案 1 :(得分:1)
这会放大视图5倍并设置内容的缩放
func scaleView() {
let scaleValue: CGFloat = 5
self.viewLetter.transform = CGAffineTransformMakeScale(scaleValue, scaleValue)
self.labelLetter.contentScaleFactor = scaleValue * x //scaleValue * native content scale (2 on iPhone 8 and 3 on iPhone 8 plus)
}