14
シェイクを検知して学ぼう! モーションイベント Swiftビギナーズ倶楽部 第5回 写真素材ぱくたそ http://www.pakutaso.com

シェイクを検知して学ぼう、モーションイベント!

Embed Size (px)

Citation preview

Page 1: シェイクを検知して学ぼう、モーションイベント!

シェイクを検知して学ぼう! モーションイベント

Swiftビギナーズ倶楽部 第5回

写真素材ぱくたそ http://www.pakutaso.com

Page 2: シェイクを検知して学ぼう、モーションイベント!

• WordPressもくもく倶楽部@Co-Edoもやってます。

• Ruby / Ruby on Rails ビギナーズ倶楽部@Co-Edoやってます( ́ ▽ ` )ノ

• スマホアプリ開発初心者な、アプリケーションエンジニア(Rails / LAMP / Java / Oracle)

Self-Intoroduction

http://ror-beginners.doorkeeper.jp/

http://wp-moku.doorkeeper.jp/

Page 3: シェイクを検知して学ぼう、モーションイベント!

1) シェイクをカウントしてみよう!

Today's Agenda

2)モーションイベントを学ぼう!

3)モーションイベントの実装方法!

Page 4: シェイクを検知して学ぼう、モーションイベント!

1-1) シェイクをカウントしてみよう!

Let’s DEMO!

Page 5: シェイクを検知して学ぼう、モーションイベント!

2-1)モーションイベントを学ぼう!

モーションイベントとは!デバイスを振ったり、傾けたりすることで、 モーションイベントが発生します。

デバイスのハードウェア

加速度センサー ジャイロスコープ

イベントを検知してくれるのは

CoreMotionフレームワーク

Page 6: シェイクを検知して学ぼう、モーションイベント!

2-2)モーションイベントを学ぼう!

https://developer.apple.com/jp/documentation/EventHandlingiPhoneOS.pdf引用資料:イベント処理ガイド(iOS用)

加速度センサー・x、y、z軸に沿った速度の変化を測定します。 ・加速度データを受け取って処理するためには、  CMMotionManagerクラスを利用します。

・startAccelerometerUpdates(プル型)  ーアプリケーションは定期的にこの値を取得します。・startAccelerometerUpdatesToQueue:withHandler(プッシュ型)  ー加速度センサーのデータ更新に応じて実行されます。

いずれかのメソッドを利用。

Page 7: シェイクを検知して学ぼう、モーションイベント!

2-3)モーションイベントを学ぼう!

ジャイロスコープ・3つの空間軸の周りの回転速度を測定します。 ・ジャイロスコープが搭載されているデバイス。

https://developer.apple.com/jp/documentation/EventHandlingiPhoneOS.pdf引用資料:イベント処理ガイド(iOS用)

・startGyroUpdates(プル型)  ーアプリケーションは定期的にこの値を取得します。・startGyroUpdatesToQueue:withHandler(プッシュ型)  ージャイロスコープのデータ更新に応じて実行されます。

ー iPhone 4以降/iPod touch第4世代/iPad 2以降

いずれかのメソッドを利用。

Page 8: シェイクを検知して学ぼう、モーションイベント!

2-4)モーションイベントを学ぼう!

データにアクセスする方法1)デバイスの大まかな向きが分かればよく、   向きベクトルは必要ないという場合=> UIDeviceを使ってデバイスの向きを取得します。

2)デバイスを振る動きに応答したい場合=> UIEventオブジェクトから必要な情報を取得します。

3)UIDeviceやUIEventを使って 必要な情報が得られない場合

=> Core Motionフレームワークを利用して、加速度センサー、 ジャイロスコープ、デバイスモーションの各クラスにアクセスします。

Page 9: シェイクを検知して学ぼう、モーションイベント!

3-1)モーションイベントの実装方法!

モーション処理メソッドは、3種類あります。

・motionBegan:withEvent ・motionEnded:withEvent ・motionCancelled:withEvent

motionBegan、motionEndedのいずれか、 あるいは両方を実装する必要があります。 motionCancelledメソッドも実装して、iOSが モーションイベントをキャンセルした場合に、 対処できるようにしましょう。

Page 10: シェイクを検知して学ぼう、モーションイベント!

@IBOutlet weak var countLabel: UILabel! var cnt = 0 override func motionBegan(motion: UIEventSubtype, withEvent event: UIEvent) { if event.type == UIEventType.Motion && event.subtype == UIEventSubtype.MotionShake { // シェイク動作始まり時の処理 // 今回は特に処理を入れていません。 } } override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) { if event.type == UIEventType.Motion && event.subtype == UIEventSubtype.MotionShake { // シェイク動作終了時の処理 cnt++ countLabel.text = cnt.description } } override func motionCancelled(motion: UIEventSubtype, withEvent event: UIEvent) { // モーションイベントをキャンセルしたとき対処 // イベントがキャンセルされるのは、シェイクモーションが割り込まれたとき、 // あるいは(シェイクがあまりに長く続くなどのため)モーションが有効でないとiOSが判断したときです。 countLabel.text = "NG" }

3-2)モーションイベントの実装方法!DEMOアプリのコード

Page 11: シェイクを検知して学ぼう、モーションイベント!

3-3)モーションイベントの実装方法!シュミレータでの 確認方法!

iOS Simulator > Hardware > Shake Gesture

Or

control + command + z

Page 12: シェイクを検知して学ぼう、モーションイベント!

ま と め

モーションイベントデータにアクセスする方法

1)デバイスの大まかな向きを取得する場合は、   UIDeviceを利用する。

2)シェイク時には、UIEventを利用する。

3)UIDeviceやUIEventを使って必要な情報が得られない   場合は、Core Motionフレームワークを利用する。

Page 13: シェイクを検知して学ぼう、モーションイベント!

わからないー! だれか教えてー♪

Swiftビギナーズ倶楽部は

わからないことは周りの人に聞いて、気軽に教え合って、 皆の疑問を1つでも解決して、楽しんで開発していきましょう。

Page 14: シェイクを検知して学ぼう、モーションイベント!

Let's study together!

Thank you :)