NXDrawKitを導入してみる
ACEDrawingViewがObj-Cで書かれていて、いまいちメンテされてないなぁと感じたので、新しいライブラリということでNXDrawkitを試してみることにしました。
ざっと見た感じ、Canvas,Palette,Toolbarの3つのコンポーネントからなっており、後者2つは無理に使う必要はない。Swift5.0まで対応していて、導入も難しくないかなーと思ってとりあえず導入プロジェクトを描きつつ、日本語解説的なのを作れれば幸いです。
導入
いつものCocoapodです。ターミナルからプロジェクトのフォルダに移動して’pod init’してpodfileを作って以下の記述を追加します
追加したら’pod install’。
pod 'NXDrawKit'
Xcodeへの導入
IBでは入らないので、Canvasクラスを直接コードで貼ってやります。この場合View.bounds全体に貼った感じですね。
ブラシ情報はdelegateで返す必要があるので CanvasDelegateを実装してfunc brush() -> Brush?をつけてやる必要があります。
import UIKit import NXDrawKit class ViewController: UIViewController, CanvasDelegate { var canvas: Canvas? override func viewDidLoad() { super.viewDidLoad() let canvasView = Canvas() canvasView.frame = self.view.bounds canvasView.delegate = self self.view.addSubview(canvasView) canvas = canvasView } // MARK: - Cnavas Delegate /// Canvasのブラシを返す func brush() -> Brush? { let brush = Brush() brush.color = UIColor.black // 色。UIColor.clearを入れると消しゴム扱いになる brush.width = 10.0 // 幅 brush.alpha = 1.0 // α値 return brush } }
最低限、これで単一ブラシでお絵かきできるCanvasが作れます。
Canvasには以下のようなメソッドがあるので、アンドゥ・リドゥ・クリアなどは簡単です(アンドゥバッファは50の模様)。saveについてはOptionalでつけられるDelegateメソッド
func canvas(canvas: Canvas, didSaveDrawing drawing: Drawing, mergedImage image: UIImage?)
が呼ばれるので、そこで画像を保管せい、ということですね。
drawing.strokeがストロークそのもののUIImageを返してくれるので、これを保存すればよいのではないかと。
背景とマージしたりとかいうのもできるようですが。
Canvasのメソッド
func update(backgroundImage: UIImage?)
func undo()
func redo()
func clear()
func save()
これでCanvasは扱えるようになったので、標準のToolbarとかPaletteを使わなければこれだけで大丈夫。与えるBlushだけDelegateで設定すればいいし、メンドクサイなら標準のものを使えばいいし、みたいな感じでしょうかね?
こちらもおいおい、設定してみたいところです。
関連記事
-
ENMLからHTMLへの変換
最近EvernoteAPIをいじっているので、コレに関するノウハウをとりあえず断片的に引っかかったと
-
ACEDrawingView導入の解説
【ACEDrawingViewとは】 ACEDrawingViewオープンソースのUIView拡張
-
ACEDrawingView導入の解説(2)
前回の続きで、ACEDrawingViewの紹介になります。 今回はACEDrawingViewと
-
HTMLParserを修正する
HTMLスクレイピングしてる時に役立つライブラリであるObjective-C-HMTL-Parser