UILabelをUIImageに変換していい感じに拡大縮小する
はじめに
UILabelのフォントサイズを変更して拡大縮小を行おうとする、と文字が小さくなるにつれて下にずれてしまいます。
そんな時はUILabelに変換して画像として表示を行うとサイズが変わっても文字の位置が変わらずいい感じになります。
動画
コード
UIViewの中にUIImageを配置しているので直接UIImageの大きさをいじらなくてもUIViewの大きさを変えるだけでサイズ変更されます。
class ViewController: UIViewController {
@IBOutlet weak var v: UIView!
@IBOutlet weak var textImage: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
textImage.image = createImage()
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let pos = touches.first!.location(in: self.view)
let transScale = CGAffineTransform(scaleX: CGFloat(pos.x)/100, y: CGFloat(pos.x)/100)
v.transform = transScale
}
func createImage() -> UIImage{
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
label.font = UIFont.systemFont(ofSize: 40)
label.textColor = .white
label.text = 1.description
label.textAlignment = .center
return UIImage.imageWithLabel(label: label)
}
}
extension UIImage {
class func imageWithLabel(label: UILabel) -> UIImage {
UIGraphicsBeginImageContextWithOptions(label.bounds.size, false, 0.0)
label.layer.render(in: UIGraphicsGetCurrentContext()!)
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return img!
}
}