我使用Swift 3创建一个iOS界面,其中某些UIView
包含(其中包括)UILabel
s根据它们在屏幕上的位置放大和缩小。我的第一个方法是创建一个舒适的大尺寸(比如100x100)并填充视图,然后根据需要使用CGAffineTransform(scaleX:y:)
进行缩放,但是我注意到标签中文本的缩小比例并不优雅,而且文本变得像素化并且在小尺度下接近不可读。作为比较(参见下面的示例),直接更改字体大小会得到更好的结果,但是我的视图中的结构有些复杂,并且不得不根据某个大小因素重新绘制所有内容,这将是一件麻烦事。有没有更好更平滑的方法来解决这个问题?缩小UILabels的质量
下面是我创建的一个示例项目,用于说明问题以及模拟器中的输出(与iPhone本身相同),缩小视图位于左侧(红色),更改的字体大小是右侧(绿色)。
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
for i in 1...10 {
let f = CGFloat(1.0)/CGFloat(i)
let view1 = UIView(frame: CGRect(x: 0, y: 0, width: 150, height: 50))
view1.backgroundColor = UIColor.red
let label1 = UILabel(frame: CGRect(x: 0, y: 0, width: 150, height: 50))
label1.text = "\(100/i)%"
label1.font = UIFont(name: "Verdana", size: 24.0)
label1.textAlignment = .right
view1.addSubview(label1)
view1.transform = CGAffineTransform(scaleX: f, y: f)
view1.center = CGPoint(x: 160 - 75.0 * f, y: CGFloat(60 * i) + 25.0 * f)
self.view.addSubview(view1)
let view2 = UIView(frame: CGRect(x: CGFloat(170), y: CGFloat(60 * i), width: 150 * f, height: 50 * f))
view2.backgroundColor = UIColor.green
let label2 = UILabel(frame: CGRect(x: 0, y: 0, width: 150 * f, height: 50 * f))
label2.text = "\(100/i)%"
label2.font = UIFont(name: "Verdana", size: 24.0 * f)
view2.addSubview(label2)
self.view.addSubview(view2)
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
其中是自动布局? –
在这个例子中,我没有使用任何自动布局,只有手写代码 – David
您是否需要将边界框缩放到特定的大小?或者字体?你可以使用'.adjustsFontSizeToFitWidth = true'并让它自动缩放字体吗? – DonMag