本日開催された「iOSオールスターズ勉強会」という勉強会に登壇させていただいた際の資料です。
※Keynoteでつくってpdfで書きだしてアップしたので、残念ながら埋め込んでいた動画が見れなくなってます
概要
スライドを見るのが面倒な方々のために、ざっくり概要を書いておきます。
1. アニメーション編
WatchKit App 側に入れてある「Staticな」リソースを使用するアニメーションは `setImageNamed:` と `startAnimatingWithImagesInRange〜` を使えば高速にアニメーションできるのですが、WatchKit App の Asset Catalog にない「Dynamicな」リソースを使用する場合はどうアニメーションを実装すべきか?という話。
- フレームごとの UIImage オブジェクトを生成して、NSTimer で一定間隔ごとに `setImage:` する、というのはパフォーマンス的に全然アウト、それらのフレーム画像をキャッシュするのもプログラミングガイドに非推奨と明記されている。
- UIImage の `animatedImageWithImages:duration:` を利用してひとつの Animated な UIImage オブジェクトを生成してから `setImage:` するのが正解。
2. テキスト入力編
こういうアニメーションする3D絵文字とか、
(Apple Storeの動画より)
音声入力とか、Smart Replies(フレーズを選択して返信)
(同じく、Apple Storeの動画より)
は WatchKit から利用可能なのか?できるとして、どうやって実装するのか?という話。
3. カスタムUI編
Appleによるヒューマンインターフェースガイドラインに載ってたこういうUI、
こういう Core Graphics でやりたくなる感じの描画できるの?どうやるの?という話。
他に紹介したのは、
- カスタムフォント
- 普通にできた
- オーバーレイ
- WKInterfaceObject は、UIView の subview 的にインターフェース同士を重ねられない
- UIEdgeInsets 的なものもない
- → WKInterfaceGroup に設定できる背景画像を利用する
- origin の調整
- WKInterfaceObject には、(UIView における) frame.origin 的なプロパティがない
- → WKInterfaceGroup を活用するとそれっぽく調整できる
WatchKitTrials
WatchKitにまつわる諸々の試行錯誤サンプルをまとめたリポジトリです。
https://github.com/shu223/WatchKitTrials
(近日push予定)
余談:ボツネタ集
個人的にはいままでで一番の大舞台だし、他の登壇者の方も濃くて役立ちそうな話をしてくれそうな方々ばかりなので、発表内容は結構悩みました。。
- ボツネタ1. 「iOSのセンサ処理 再入門」
もう iOS も 8 になって、Swift という新言語まで登場しちゃって、どんどん進化していきますが、最近になって意外とわかってないなーと気付いたのが、もうかなり昔からある加速度センサとかジャイロスコープの値の処理の方法。
たとえば、iPhone をブンッと振ると、振っている間に加速度センサの値が大きく動くんじゃなくて、止めた瞬間にピークが立ち、直後に反対方向にまたピークが立ちます。これらをどう処理するのが定石なのか?とか。
あと、ユーザー加速度とか重力とかクォータニオンとかオイラー角とか、それらを扱うための Core Motion とか GLKit とか。
ボツ理由:結局のところ自分は興味があるだけで専門分野ではないので、大舞台で不正確なことをいってしまう恐れがありやめました。
- ボツネタ2. 「今日から始めるBLE」
スライドの最後のページでも告知している通り、『iOS x BLE プログラミング 〜Core Bluetooth 徹底解説〜』(仮)という著書が来月発売予定なので、宣伝も兼ねられるのと、本書いたばかりなので自信をもって話せるということで、この方向性も検討しました。
ボツ理由:BLEとか外部デバイス連携の話って、iOSエンジニアの中でも興味がある人が限られるので、400人の前で話す話じゃないなー、ということでやめました。
- ボツネタ3. 「iOSのバックグラウンドでできることできないことのまとめ」
Core Bluetooth の機能に、「状態の保存と復元」という、アプリが停止しても(プロセスが殺されても)iOS が BLE の処理のそのまま引き継いで、必要に応じてアプリを起こしてくれる という超強力なものがあり、各バックグラウンドモードの機能とか制約を知ることは非常に有意義だなーと。バックグラウンドモードも位置情報とかオーディオとかいろいろあって、リファレンスとかプログラミングガイドをそれぞれ熟読したわけじゃないし。
ボツ理由:さまざまなバックグラウンドモードについて詳しく調べるのが大変なのであきらめました。
※ちなみに Core Bluetooth の「状態の保存と復元」については拙著に詳しく書いたので興味のある方は是非!
おわりに
スライドに書いたこと以外にも、通知機能の検証がシミュレータでどこまでできるかとか、WatchKit Extension 側にも Parse SDK を入れて親アプリと同じユーザー(アカウント)になってデータのやりとりをするとか、いろいろ「実際にさわってみてわかったこと」があったのですが、発表時間は20分しかないので、今回は見た目的にわかりやすい話に絞りました。
他の発表者の方々の話も非常に勉強になりました。参加者のみなさま、主催の dots. と登壇者のみなさま、どうもありがとうございました!