LoginSignup
3
4

More than 1 year has passed since last update.

Swift(iOS)でお絵描きViewを追加する

Last updated at Posted at 2023-02-04

ユーザーに指で描画してもらいたい

Feb-04-2023 07-29-38.gif
iPhoneをタッチして絵を描いてもらいたい場合、どのようにお絵描きできるViewを追加すればいいのでしょうか?

ライブラリを追加すればOK

お絵描きライブラリはいろいろありますが、今回はこれで。

インストール

Swift Package Manager、Carthage、ファイルのドラッグ&ドロップ、の方法がありますが、僕のお気に入りはSwift Package Managerです。

使う

とりあえず描く

import UIKit
import Drawsana

let drawingView = DrawsanaView()
let penTool = PenTool()
let imageView = UIImageView()

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        drawingView.set(tool: penTool)
        drawingView.userSettings.strokeWidth = 10
        drawingView.userSettings.strokeColor = .black
        drawingView.userSettings.fillColor = .yellow
        drawingView.userSettings.fontSize = 24
        drawingView.userSettings.fontName = "Marker Felt"
        drawingView.frame = view.bounds
        view.addSubview(drawingView)
    }
}

これで描画ができる。

機能

消す

drawingView.operationStack.undo() // undo
drawingView.operationStack.redo() // redo
drawingView.set(tool: EraserTool()) // 消しゴムにする

保存


// フォトライブラリに保存
func saveFinalImage() {
    let image:UIImage? = drawingView.render()
    imageView.image = image
    UIImageWriteToSavedPhotosAlbum(image!, self, nil, nil)
}

// UIImageにオーバーラップさせる。drawingViewと同じサイズのUIImageViewを後ろに置いて描画すれば、ちょうどサイズを合わせてオーバーラップしてくれる。
func saveImageOnImage(_ backgroundUIImage:UIImage) {
    let overlapImage:UIImage? = drawingView.render(over:backgroundUIImage)
    imageView.image = overlapImage)
    UIImageWriteToSavedPhotosAlbum(overlapImage!, self, nil, nil)
}


// 以下はDrawingオブジェクトとして扱う場合。

func save() {
  let jsonEncoder = JSONEncoder()
  jsonEncoder.outputFormatting = [.prettyPrinted, .sortedKeys]
  let jsonData = try! jsonEncoder.encode(drawingView.drawing)
  // store jsonData somewhere
}

func load() {
  let data = Data()// load data from somewhere
  let jsonDecoder = JSONDecoder()
  let drawing = try! jsonDecoder.decode(Drawing.self, from: data)
  drawingView.drawing = drawing
}


いろいろな機能を試してみたければ、リポジトリのデモフォルダからViewControllerとColorPickerViewControllerとToolPickerViewControllerをコピーするのがおすすめ。

全ての機能はドキュメントで。

🐣


フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

機械学習、ARアプリ(Web/iOS)を作っています。
機械学習/AR関連の情報を発信しています。

Twitter
Medium
GitHub

3
4
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
3
4