スウィフト3を使用して、UIView
(とりわけ)を含むものが、スクリーン上のどこに配置されているかに基づいて拡大縮小されています。私の最初のアプローチは、ビューを作成して、寛大に大きなサイズ(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