[iOS 10] PlaygroundでUIKitの描画を行う

[iOS 10] PlaygroundでUIKitの描画を行う

Clock Icon2016.09.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Playground

こんにちは!
モバイルアプリサービス部の田中孝明です。

PlaygroundはXcodeに付属されている、Swiftの実行結果をリアルタイムで処理・描画してくれる機能です。
iOS 9からUIの描画を試す処理が若干変わりましたので、その紹介ができればと思います。

UIKitの描画

Playgroundを利用する場合はXcodeのプロジェクトにPlaygroundを追加するだけです。

スクリーンショット 2016-09-02 20.53.29

例としてUITableViewを描画させるサンプルを作成します。

Playgroundに以下のライブラリをインポートします。

import UIKit
import XCPlayground
import PlaygroundSupport


以下にUITableViewのコードをPlaygroundに追加します。

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var tableView: UITableView!
    let items = ["Item 1", "Item 2", "Item 3"]

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.frame = CGRect(x: 0, y: 0, width: 320, height: 480)
        self.tableView = UITableView(frame:self.view.frame)
        self.tableView!.dataSource = self
        self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
        self.view.addSubview(self.tableView)
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
        return self.items.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
        let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
        let text = self.items[indexPath.row]
        cell.textLabel?.text = text
        return cell
    }
}


あとはViewControllerを初期化してPlaygroundPage.current.liveViewに代入するとPlaygroundtimelineに描画されるようになります。
この処理がiOS 9以前と変更になっています。

var ctrl = ViewController()
PlaygroundPage.current.liveView = ctrl


実行

スクリーンショット 2016-09-12 19.05.16
PlaygroundのtimelineにUITableViewの描画結果が表示されました!

まとめ

Playgroundはアプリ開発者ではなくても手軽にSwiftの環境を試せる便利なツールだと思います。(Xcodeをインストールするという手間を考慮しなければ、、、ですが)
今回はUIKitの描画だけにフォーカスしましたが、UIアニメーションも試すことができますので、設定値を変えてその場で結果を見たいときは重宝するのではないでしょうか?

参考文献

About Playgrounds

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.