我使用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