Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

viewをimage化する方法

More than 1 year has passed since last update.

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
    }

以上を実行すると下記のように画像が生成される
スクリーンショット 2019-11-10 0.04.45.png

文字途切れてるわ位置最悪だわでセンスが感じられない。。。

締め

今回は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
    }
mumei1
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away