LoginSignup
0
1

More than 3 years have passed since last update.

viewをimage化する方法

Posted at

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
    }
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1