koogawa blog

iOS、Android、foursquareに関する話題

watchOS 2のCore Motionを使ってApple Watch上で物体を転がした話

watchOS 2からようやくWatch上でCore Motionが使えるようになりましたね!

ht_tc07.jpg

Core Motionを使ったアプリを作っている自分としてはとても嬉しいニュースでした。

というわけで、さっそくApple Watchの傾きに沿って丸い物体が転がるデモを作ってみました。

さっそく問題が

確かにCore MotionによってApple Watchの傾きを取得できるようになったわけですが、ここで致命的な問題が。。。

そう、Apple Watch上ではオブジェクトの座標を指定できないのです。

要するに

view.frame = CGRectMake();

みたいなことはできないわけですね。

Apple Watchの傾き(x,y)から移動量を計算して物体を動かそうと考えていたのですが、これではどうすることもできません。とは言え、座標指定できないのにはきっと理由がある(Appleさんも望んでない)と思うので、ここでいったん諦めようとしました。

どうしても転がしたい

そこで思いついたのが、オブジェクトのinsetを使う方法ですw

insetにより余白を作ることで物体の位置を調整するわけです。Apple Watchの傾きに合わせてinsetを調整することで、物体が動いているように見えます。

イメージ図:
marimotion.png

もちろんこれは正しい使い方ではありません。

あくまでネタなのでご理解くださいm( )m

問題点

これで無事、Apple Watchの傾きに合わせて物体が転がるようになったわけですが、もうひとつだけ問題が。。

Apple Watchをちょっとでも上方向に傾けると、すぐに画面が消えてしまうのです。

ただ、これはとても正しい動きだと思います。腕を下ろす動作をしたら画面は消えるべきなのです。

そもそもApple Watch長い時間見るものではないのです。

まとめ

もう一度書いておきますが、このinsetの使い方は間違っております。決して真似しないでくださいね☆

サンプルコード

https://github.com/koogawa/Marimotion Objective-Cですみません