PencilKitを用いて画像に描くアプリを作っています。画像の保存はできるのですが、PencilKitを用いて描いた線が反映されません。どこに不備や間違いがあるかご教示いただきたいです。
import UIKit import PencilKit class PencilViewController: UIViewController, PKCanvasViewDelegate { private lazy var canvasView: PKCanvasView = setupCanvasView() private lazy var imageView: UIImageView = setupImageView() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. self.canvasView.addSubview(self.imageView) self.canvasView.sendSubviewToBack(self.imageView) self.view.addSubview(self.canvasView) navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Save To Photo", style: .plain, target: self, action: #selector(save)) } func scrollViewDidZoom(_ scrollView: UIScrollView) { if scrollView == self.canvasView { self.imageView.frame.size = CGSize(width: self.view.frame.width * scrollView.zoomScale, height: self.view.frame.height * scrollView.zoomScale) self.imageView.center = CGPoint(x: scrollView.contentSize.width / 2, y: scrollView.contentSize.height / 2) } } private func setupCanvasView() -> PKCanvasView { let canvasView: PKCanvasView = PKCanvasView(frame: self.view.frame) canvasView.delegate = self canvasView.maximumZoomScale = 5.0 canvasView.isOpaque = false canvasView.backgroundColor = .clear canvasView.contentOffset = CGPoint.zero canvasView.contentSize = self.view.frame.size canvasView.tool = PKInkingTool(.pen, color: .black, width: 30) // PKToolPicker: ドラッグして移動できるツールパレット (ペンや色などを選択できるツール) if let window = UIApplication.shared.windows.first { if let toolPicker = PKToolPicker.shared(for: window) { toolPicker.addObserver(canvasView) toolPicker.setVisible(true, forFirstResponder: canvasView) canvasView.becomeFirstResponder() } } return canvasView } private func setupImageView() -> UIImageView { let imgView = UIImageView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)) imgView.image = UIImage(named: "Blackboard 英語") imgView.contentMode = UIView.ContentMode.scaleAspectFit return imgView } @IBAction func save(_ sender: UIBarButtonItem) { let image:UIImage! = imageView.image if image != nil { UIImageWriteToSavedPhotosAlbum(image, self, #selector(PencilViewController.image(_:didFinishSavingWithError:contextInfo:)), nil) print("アルバム保存 開始") }else{ } } // Album save 結果 @objc func image(_ image: UIImage, didFinishSavingWithError error: NSError!, contextInfo: UnsafeMutableRawPointer) { if error != nil { }else{ print("アルバム保存 終了") } } }
現在はImageViewの画像しか保存していないため、描画内容が反映されていないのではないでしょうか。
描画内容はあくまで「PKCanvasView」が保持していると思うので、以下手順などでImageを合成してから保存するのはいかがでしょうか。
1、UIImageViewからImageを抽出
2、PKCanvasViewから、描画内容をImageとして抽出
3、上記の1・2のImageを合成して保存
もしくは以下参考URLの様に、特定のView上をすべてキャプチャしてしまうなど。
https://qiita.com/tatetate55/items/a31dcb6944b3f068bdd4
できました!ありがとうございます!!
回答2件
あなたの回答
tips
プレビュー