シェイクイベントの実装
Cocoa勉強会 関東第37回
新居雅行 nii@msyk.net

1
Agenda

シェイクイベントとは何か
シェイクイベントの利用方法
デモ

2
シェイクイベントとは

iPhone OS 3.0よりサポートされたイベント

• 「ジェスチャー」の一種と位置づけている

加速度センサーの情報を認識

• 「強く振った」ことを認識しメソッド呼び出しが行われる
• 方向の変更と間違えないよう...
シェイクイベントの発生

First Responderしか応答しない

• そこからチェーンする

デフォルトではFirst Responderになれないクラスも
けっこうある

• テキスト系のコンポーネントは編集可能な状態になれば自
動的...
First Responderになるには?
何もしないでFirst Responderになるオブジェクト

• …そのままでOK

オブジェクトを明示的にFirst Responderにする

• [obj becomeFirstRespond...
イベント対応のプラン

UIViewなどを継承したオブジェクトを定義する
UIViewControllerをFirst Responderにする

• - (void)viewDidAppear:(BOOL)animated {
[self b...
イベント応答
First Responderに対して以下のメソッド呼び出しが
行われる
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
! NSLo...
認識可能な状態
UIEventSubType

• モーションイベントかそうでないか
• (きっと将来拡張するのでしょう)

UIEvent

• UIEventType:タッチorモーション
• UIEventSubType:メソッド引数と同...
イベント応答のタイミング

シェイクを始めたら

• motionBegan:withEvent:

1秒以内にシェイクをやめたら

• motionEnded:withEvent:

1秒以上続けていると

• motionCancelled...
UndoとRedoのアラート

テキストフィールド等のUndo

• UIApplicationのapplicationSupportsShakeToEditプロ
パティがYESの場合(デフォルトはYES)
• イベントがUIApplicati...
Demo

11
Wrap-up

「振った」ことの取得が簡単にできるようになった
システムのUndo/Redoと併用しなければ、メソッド
の定義のみで比較的簡単に実装できる

12
Upcoming SlideShare
Loading in …5
×

Cocoa勉強会#37-シェイクイベントの実装

425 views

Published on

Cocoa勉強会#37
2009/10/24
シェイクイベントの実装
新居雅行

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
425
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Cocoa勉強会#37-シェイクイベントの実装

  1. 1. シェイクイベントの実装 Cocoa勉強会 関東第37回 新居雅行 nii@msyk.net 1
  2. 2. Agenda シェイクイベントとは何か シェイクイベントの利用方法 デモ 2
  3. 3. シェイクイベントとは iPhone OS 3.0よりサポートされたイベント • 「ジェスチャー」の一種と位置づけている 加速度センサーの情報を認識 • 「強く振った」ことを認識しメソッド呼び出しが行われる • 方向の変更と間違えないようにしている(らしい) 3
  4. 4. シェイクイベントの発生 First Responderしか応答しない • そこからチェーンする デフォルトではFirst Responderになれないクラスも けっこうある • テキスト系のコンポーネントは編集可能な状態になれば自 動的にFirst Responderになる • UIViewはデフォルトではFirst Responderになれない 4
  5. 5. First Responderになるには? 何もしないでFirst Responderになるオブジェクト • …そのままでOK オブジェクトを明示的にFirst Responderにする • [obj becomeFirstResponder] First Responderになることができないオブジェクト • 継承したクラスで以下のメソッドを定義 • - (BOOL)canBecomeFirstResponder { return YES; } 5
  6. 6. イベント対応のプラン UIViewなどを継承したオブジェクトを定義する UIViewControllerをFirst Responderにする • - (void)viewDidAppear:(BOOL)animated { [self becomeFirstResponder]; } 6
  7. 7. イベント応答 First Responderに対して以下のメソッド呼び出しが 行われる - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event { ! NSLog(@"###motionBegan:"); } - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event { ! NSLog(@"###motionEnded:"); } - (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event { ! NSLog(@"###motionCancelled:"); } 7
  8. 8. 認識可能な状態 UIEventSubType • モーションイベントかそうでないか • (きっと将来拡張するのでしょう) UIEvent • UIEventType:タッチorモーション • UIEventSubType:メソッド引数と同じ • 他に発生時刻、タッチイベントの情報 それ以外の情報 • 加速度センサーの情報をキャッシュして判断 8
  9. 9. イベント応答のタイミング シェイクを始めたら • motionBegan:withEvent: 1秒以内にシェイクをやめたら • motionEnded:withEvent: 1秒以上続けていると • motionCancelled:withEvent: 9
  10. 10. UndoとRedoのアラート テキストフィールド等のUndo • UIApplicationのapplicationSupportsShakeToEditプロ パティがYESの場合(デフォルトはYES) • イベントがUIApplicationまでチェーンした場合、Undoあ るいはRedoのボタンのついたアラート表示になる 自前のクラスの場合、Undoの実装はやっぱり自前? • 本来のレスポンダチェーンの邪魔をしないようにする 10
  11. 11. Demo 11
  12. 12. Wrap-up 「振った」ことの取得が簡単にできるようになった システムのUndo/Redoと併用しなければ、メソッド の定義のみで比較的簡単に実装できる 12

×