viewからimageを生成する機会がありましたので備忘録としてここに記す。
変数名やサイズ等はだいぶ適当にやっているのであしからず。
View生成
//viewを生成する
func createView() {
// view生成
let view = UIView(frame: CGRect(x: 160, y: 200, width: 200, height: 200))
view.backgroundColor = UIColor.white
// ラベルを生成しviewに追加
let view1 = UILabel(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
view1.text = "テスト1"
view.addSubview(view1)
let view2 = UILabel(frame: CGRect(x: 50, y: 0, width: 50, height: 50))
view2.text = "テスト2"
view.addSubview(view2)
let view3 = UILabel(frame: CGRect(x: 0, y: 50, width: 50, height: 50))
view3.text = "テスト3"
view.addSubview(view3)
let testReturn = createImage(view)
}
Viewのイメージ化
// viewのイメージ化
func createImage(_ view: UIView) -> UIImage {
UIGraphicsBeginImageContext(view.bounds.size)
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0)
let context = UIGraphicsGetCurrentContext()!
view.layer.render(in: context)
let image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}
文字途切れてるわ位置最悪だわでセンスが感じられない。。。
締め
今回はViewからimage生成を行なったがXibからimage生成を行いたい所存。
できるようになったら後日投稿したい。
参考になるサイト等がありましたら教えてください。
以下に今回作成するにあたって書いたコードを記す。
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func buttonAction(_ sender: Any) {
createView()
}
//viewを生成する
func createView() {
// view生成
let view = UIView(frame: CGRect(x: 160, y: 200, width: 200, height: 200))
view.backgroundColor = UIColor.white
// ラベルを生成しviewに追加
let view1 = UILabel(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
view1.text = "テスト1"
view.addSubview(view1)
let view2 = UILabel(frame: CGRect(x: 50, y: 0, width: 50, height: 50))
view2.text = "テスト2"
view.addSubview(view2)
let view3 = UILabel(frame: CGRect(x:
0, y: 50, width: 50, height: 50))
view3.text = "テスト3"
view.addSubview(view3)
let testReturn = createImage(view)
}
// viewをイメージ化
func createImage(_ view: UIView) -> UIImage {
UIGraphicsBeginImageContext(view.bounds.size)
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0)
let context = UIGraphicsGetCurrentContext()!
view.layer.render(in: context)
let image = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}