サンプル勉強会 1-2 実装
はじめに
前回、ForceSketchを題材にソースコードリーディングをしたお話をしました。今回は、そのソースコードリーディングの結果を踏まえて、サンプルと同じ機能の実装に挑戦しました。
勉強会の進め方
実装フェーズ(1h)と共有フェーズ(0.5h)の次回配分で進めます。各フェーズで行うことは下記の通りです。
- ソースコードリーディングフェーズ
- 黙々実装
- 共有フェーズ
- どういう方針で作ったか
- どこでつまずいたか
結果
結論としては、ちゃんと動かせるところまで実装できた人はいませんでした。理由は、サンプルが古く、swift2からswift4に対応させる必要があったことに加えて、なぜか imageAccumulator.setImage()
で落ちるという現象があったからです。
他のメンバーの共有フェーズ時の議論内容
- Fix祭りだった
- swift2からswift4に直すのをXcodeがサポートしてくれる機能を使いまくったという話です
- selector利用時に、対象のメソッドに@objcをつける必要がある
- delegateメソッドの第一引数に
_
が入る - NSを使わない
UIGraphicsGetCurrentContext
の扱い方が変わったUIGraphicsGetCurrentContext
のインスタンスをメソッドに渡してたのが、このインスタンスのインスタンスメソッドを使うようになった- オブジェクト指向っぽくなった
- swift2からswift4に直すのをXcodeがサポートしてくれる機能を使いまくったという話です
- 実行してしばらくすると落ちる
Thread 3: EXC_BAD_ACCESS (code=1, address=0x28)
imageAccumulator.setImage(gaussianBlur.valueForKey(kCIOutputImageKey) as! CIImage)
どうもここのようだ
私の共有フェーズ時の議論内容
- 詰まったところは同上
- 設計方針
- タッチと描画を管理するロジックをViewControllerからカスタムViewに分離
- Github
後日調査結果
- iOS11だと落ちる、iOS10やiOS9だと落ちない
- iOS10やiOS9のシミュレーターでの操作はForceSketchにあるgifのように綺麗にならない
- 実機の確認はしていない
終わりに
今回は、ForceSketchを題材にソースコードリーディングをした結果を元に、実装に挑戦した内容を記しました。ターゲットとしたサンプルコードが古かったため、動作させるところまで到達できませんでした。次回以降は、なるべく最近のサンプルを使おうと思います。ただし、Swift3から関数引数が省略されなくなったはなしなど、swift2からswift3への大幅な変更に対して手を動かしてみるという経験ができたのはよかったと思います。