たった3行のコードで PencilKit を導入して Apple Pencil 対応

## 概要
- コード3行で Apple Pencil 対応が可能と言われていることを検証する

## WWDC 2019 で紹介された3行のコード

[Introducing PencilKit \- WWDC 2019 \- Videos \- Apple Developer](https://developer.apple.com/videos/play/wwdc2019/221/) によると、「たった3行のコードで追加できます」とのこと。

<img width="512" alt="PencilKit-Three-Lines-of-Code-4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/df7e08ca-0eda-5546-a67f-7b613fc5ff8b.png">

![PencilKit-Three-Lines-of-Code-0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/de39bb80-b187-f1ac-5d11-387042c36e96.png)

## 今回の環境

- Xcode 11.0
- Swift 5.1
- iPadOS 13.1
- iOS 13.0

## プロジェクトの作成

Xcode にてテンプレートから iOS + Single View App を選択する。

<img width="726" alt="PencilKit-Three-Lines-of-Code-1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/8d32a9bd-eb14-3a34-c2a2-c54bc9af54a9.png">

以下のオプションを選択する。

- Language: Swift
- User Interface: Storyboard

<img width="721" alt="PencilKit-Three-Lines-of-Code-2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/22bbbd50-579d-314d-9d25-d365b7d127b1.png">

プロジェクトを作成すると AppDelegate.swift, SceneDelegate.swift, ViewController.swift という Swift のソースコードが用意される。

## ソースコード

ViewController.swift に import PencilKit と3行のコードを追加する。

```swift
import UIKit

// PencilKit を使う
import PencilKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        // Three Lines of Code ここに3行のコードを足す
        let canvas = PKCanvasView(frame: view.frame)
        view.addSubview(canvas)
        canvas.tool = PKInkingTool(.pen, color: .black, width: 30)
    }
}
```

## 実機での実行結果

実機 (iPad Pro 11-inch + iPadOS 13.1) にインストールして実行してみる。
Apple Pencil や指などで文字や絵を書くことができるようになった。
たしかに3行のコードで PencilKit を導入できている (import文は別として)。

![PencilKit-Three-Lines-of-Code-iPad.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/f2fdddd4-9462-97f9-bf60-2dcabd80b8a9.jpeg)

PencilKit は Apple Pencil の使えない iPhone でも同じように動作する。
実機 (iPhone 11 Pro + iOS 13.0) にインストールして実行してみたところ、
指などで文字や絵を書くことができるようになった。

![PencilKit-Three-Lines-of-Code-iPhone.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/bb1c56e9-620a-687b-ba32-4c3b7b0eac10.jpeg)

## ツールパレットも短いコードで追加できる

ペンや色などを選択できるツールパレットも短いコードで画面に表示させることができる。

```swift
import UIKit

// PencilKit を使う
import PencilKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        // Three Lines of Code ここに3行のコードを足す
        let canvas = PKCanvasView(frame: view.frame)
        view.addSubview(canvas)
        canvas.tool = PKInkingTool(.pen, color: .black, width: 30)

        // PKToolPicker: ドラッグして移動できるツールパレット (ペンや色などを選択できるツール)
        if let window = UIApplication.shared.windows.first {
            if let toolPicker = PKToolPicker.shared(for: window) {
                toolPicker.addObserver(canvas)
                toolPicker.setVisible(true, forFirstResponder: canvas)
                canvas.becomeFirstResponder()
            }
        }
    }
}
```

iPad Pro 11-inch + iPadOS 13.1 で実行してみる。
ツールパレットが表示されるようになった。

![PKToolPicker-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/2a0ba24d-535c-7b43-8aa1-46fa9d9764f3.png)

ツールパレットは、ドラッグして好きな場所に移動したり小さくすることもできる。

![PKToolPicker-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139365/d0956ff2-8c2a-9f4b-fd0d-cac91729fd13.png)

## 参考資料

- [Introducing PencilKit \- WWDC 2019 \- Videos \- Apple Developer](https://developer.apple.com/videos/play/wwdc2019/221/)
- [PencilKit \| Apple Developer Documentation](https://developer.apple.com/documentation/pencilkit)
- [Drawing With PencilKit \| Apple Developer Documentation](https://developer.apple.com/documentation/pencilkit/drawing_with_pencilkit)