内容の保証はできません。


/System/Library/Frameworks/UIKit.framework

クラス UIGestureRecognizer

NSObject
  |
  +--UIGestureRecognizer

概要

UIGestureRecognizerは、UITapGestureRecognizerUIRotationGestureRecognizerなどの具象ジェスチャーリコグナイザクラスの抽象基本クラスです.ジェスチャーリコグナイザオブジェクト(または、単純にジェスチャーリコグナイザ)はジェスチャーを認識するためのロジックを分離し、その認識に対して作用します.これらのリコグナイザオブジェクトは、その一つが一般的なジェスチャーを認識するか、いくつかのケースでジェスチャーの変化が生じたときに、指定された各ターゲットオブジェクトにアクションメッセージを送信します.

UIGestureRecognizerクラスは全ての具象ジェスチャーリコグナイザについて構成可能な、一般的な動作の設定を定義します.また、そのデリゲート(UIGestureRecognizerDelegateプロトコルを採用するオブジェクト)に通信することも可能で、これによって、いくつかのきめ細かい動作をカスタマイズすることが可能になります.

ジェスチャーリコグナイザは、指定されたビューと、そのビューの全てのサブビューでヒットテストのタッチに対して動作します.したがって、ジェスチャーリコグナイザは任意のビューに関連づけられなければなりません.関連付けを行うには、UIViewのaddGestureRecognizer:メソッドをコールしなければなりません.ジェスチャーリコグナイザは、ビューのレスポンダチェインには関与しません.

ジェスチャーリコグナイザは、それに関連づけられた一つまたは複数のターゲットアクションのペアを保持しています.複数のターゲットアクションのペアがある場合、それらは分離されており互いに積み重なることはありません.ジェスチャーの認識は結果として、それらの各ペアのターゲットに対してアクションメッセージのディスパッチを行います.呼び出されるアクションメソッドは次のいずれかのシグネチャに準拠する必要があります.

- (void)handleGesture;
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer;

後者のシグネチャに準拠するメソッドはいくつかのケースで、ジェスチャーリコグナイザがターゲットに追加情報メッセージ送信の問い合わせをすることを許容します.例えば、このジェスチャーのアクションメソッドの最後の呼び出しより、ターゲットがUIRotationGestureRecognizerオブジェクトに(ラジアン単位での)回転角度について問い合わせることができます.ジェスチャーリコグナイザのクライアントは、locationInView:メソッドかlocationOfTouch:inView:メソッドのコールによってジェスチャーの位置を問い合わせることもできます.

ジェスチャーリコグナイザによって解釈されたジェスチャーは連続または不連続のいずれかになることができます.不連続のジェスチャーでは、ダブルタップのようなマルチタッチシーケンスで発生するアクションも、結果としてはシングルアクションとして送信されます.ただし、ジェスチャーリコグナイザが回転ジェスチャーのような連続のジェスチャーを解釈したとき、マルチタッチシーケンスが終了するまで各増分変更のためのアクションメッセージは送信されます.

ウインドウは、ジェスチャーリコグナイザと結びついているヒットテストビューにタッチイベントを提供する前に、ジェスチャーリコグナイザにそれを提供します.一般的に、ジェスチャーリコグナイザが、マルチタッチシーケンスのタッチの流れを分析して、そのジェスチャーを認識しない場合には、ビューはタッチの全てを返します. ジェスチャーリコグナイザがそのジェスチャーを認識する場合には、ビューはタッチの最大のサブセットのいずれかを返します(そしてそれらはキャンセルされます).ジェスチャー認識におけるアクションの通常のシーケンスは次に示すcancelsTouchesInViewdelaysTouchesBegandelaysTouchesEndedプロパティのデフォルト値によって決定されます.

  • cancelsTouchesInView―ジェスチャーリコグナイザがそのジェスチャーを認識した場合、それらのビューからそのジェスチャーのタッチを解放します(従って、ウインドウはこの操作を提供しません).ウインドウは(touchesCancelled:withEvent:)メッセージとともに以前に提供されたタッチをキャンセルします.ジェスチャーリコグナイザがそのジェスチャーを認識しない場合、ビューはマルチタッチシーケンスの全てのタッチを返します.
  • delaysTouchesBegan―ジェスチャーリコグナイザがタッチイベントを分析している時、そのジェスチャーの認識に失敗していない限り、ウインドウは、UITouchPhaseBeganフェイズ時に、アタッチされたビューへのタッチオブジェクトの提供を保留します.ジェスチャーリコグナイザがその後そのジェスチャーを認識したとしても、ビューがそれらのタッチオブジェクトを返すことはありません.ジェスチャーリコグナイザがそのジェスチャーを認識しない場合、ウインドウはビューのtouchesBegan:withEvent:メソッドの呼び出しにより、それらのオブジェクトを提供します.(おそらく、タッチの現在位置を知らせる為に、引き続いてtouchesMoved:withEvent:メソッドの呼び出しも行われます )
  • delaysTouchesEnded―ジェスチャーリコグナイザがタッチイベントを分析している時、そのジェスチャーの認識に失敗していない限り、ウインドウは、UITouchPhaseBeganフェイズ時に、アタッチされたビューへのタッチオブジェクトの提供を保留します.ジェスチャーリコグナイザがその後ジェスチャーを認識したとしても、タッチはキャンセルされます(touchesCancelled:withEvent:メッセージ内で).ジェスチャーリコグナイザがそのジェスチャーを認識しない場合、ウインドウはビューのtouchesEnded:withEvent:メソッドの呼び出しにより、それらのオブジェクトを提供します.

上記の説明における"認識(recognize)"は必ずしも認識状態への移行に一致するものではないことに注意してください.

サブクラス化における注意

あなたは、独自のジェスチャーを認識するために、UIGestureRecognizerのサブクラスを作成することがあります.例に"チェックマーク"ジェスチャーがあります.具象ジェスチャーリコグナイザを作成したいならば、UIGestureRecognizerSubclass.hヘッダファイルをインポートしてください.このヘッダーでは、サブクラスが、いずれもオーバーライド、呼び出し、再設定する必要のある全てのメソッドとプロパティが宣言されています.

ジェスチャーリコグナイザは定義済みのステートマシン内で、それらが処理するマルチタッチイベントのように後続の状態遷移の元で動作します.その状態とそれらの遷移は、連続または不連続のジェスチャーとは異なります.全てのジェスチャーリコグナイザはPossible状態(UICestureRecognizerStatePossible)でマルチタッチシーケンスを開始します.不連続のジェスチャーはPossible状態から、Recognized状態(UIGestureRecognizerStateRecognized)か、Failed状態(UIGestureRecognizerStateFailed)のいずれかに遷移します.これは、正常にジェスチャーを解釈するか否かによって異なります.ジェスチャーリコグナイザがRecognized状態に遷移したならば、リコグナイザはアクションメッセージをターゲットに送信します.

連続のジェスチャーについては、ジェスチャーリコグナイザの状態遷移は次の図に示すように、より多くの遷移が形成される可能性があります.

		Possible ----> Began ----> [Changed] ----> Cancelled
		Possible ----> Began ----> [Changed] ----> Ended

Changed状態は、Cancelled状態かEnded状態に到達する前に複数回発生する可能性があります.ジェスチャーリコグナイザは各状態遷移にアクションメッセージを送信します.したがって、ピンチのような連続のジェスチャーは、2本の指が互いに同じ方向に移動するか離れて移動することによりアクションメッセージを送信します.UIGestureRecognizerStateにある列挙型の定数はこれらの状態を表現しています.(この定数ではRecognized状態とEnded状態が同義であることに注意してください)

サブクラスは、状態間を遷移する際にstateプロパティを適切な値をする必要があります.

メソッドのオーバーライド

"サブクラスのためのメソッド"に宣言されているメソッドはサブクラスでオーバライドする必要があります.また、定期的にそのstateプロパティ(下に宣言されている様に)を再設定しなければなりません.場合によっては– ignoreTouch:forEvent:メソッドをコールすることもあります.

特別な考慮事項

stateプロパティは、UIGestureRecognizer.hのヘッダファイル内で読み取り専用のプロパティとして宣言されます.このプロパティの宣言はジェスチャーリコグナイザのクライアントに意図されたものです.UIGestureRecognizerのサブクラスはUIGestureRecognizerSubclass.hをインポートしなければなりません.このヘッダファイルは読み書き可能なstateプロパティの再宣言を含んでいます.

タスク

ジェスチャーリコグナイザの初期化

– initWithTarget:action:

ターゲット、アクションの追加と削除

– addTarget:action:
– removeTarget:action:

ジェスチャーの位置とタッチの取得

– locationInView:
– locationOfTouch:inView:
– numberOfTouches

認識状態とビューの取得

state property
view property
enabled property

タッチの遅延とキャンセル

cancelsTouchesInView property
delaysTouchesBegan property
delaysTouchesEnded property

リコグナイザの依存関係の指定

– requireGestureRecognizerToFail:

デリゲートの設定と取得

delegate property

サブクラスのためのメソッド

UIGestureRecognizerSubclass.hヘッダーファイルには、クラスの拡張用にUIGestureRecognizerのサブクラスによってのみオーバーライドまたはコールされることが意図されたメソッドの宣言が含まれています.UIGestureRecognizerの具象サブクラスを単に使用するクライアントは、これらのメソッドを決して呼び出してはなりません.

– touchesBegan:withEvent:
– touchesMoved:withEvent:
– touchesEnded:withEvent:
– touchesCancelled:withEvent:
– reset
– ignoreTouch:forEvent:
– canBePreventedByGestureRecognizer:
– canPreventGestureRecognizer:

プロパティ

cancelsTouchesInView

ジェスチャーが認識された時にビューにタッチが届けられたかどうかを返す.

@property(nonatomic) BOOL cancelsTouchesInView

delaysTouchesBegan

レシーバがそのビューのビギンフェーズにタッチの送信を遅らせるかどうかを返す.

@property(nonatomic) BOOL delaysTouchesBegan

delaysTouchesEnded

レシーバがそのビューのエンドフェーズにタッチの送信を遅らせるかどうかを返す.

@property(nonatomic) BOOL delaysTouchesEnded

delegate

ジェスチャーリコグナイザのデリゲートを返す.

@property(nonatomic, assign) id<UIGestureRecognizerDelegate> delegate

enabled

ジェスチャーリコグナイザが有効かどうかを返す.

@property(nonatomic, getter=isEnabled) BOOL enabled

state

ジェスチャーリコグナイザの現在の状態を返す.(読み取り専用)

@property(nonatomic, readonly) UIGestureRecognizerState state

view

ジェスチャーリコグナイザにアタッチされているビューを返す.(読み取り専用)

@property(nonatomic, readonly) UIView *view

インスタンスメソッド

addTarget:action:

ジェスチャーリコグナイザオブジェクトにターゲットとアクションを追加する.

- (void)addTarget:(id)targetaction:(SEL)action

canBePreventedByGestureRecognizer:

指定されたジェスチャーリコグナイザがジェスチャーの認識からレシーバを防げることを示すためにオーバーライドされる.

- (BOOL)canBePreventedByGestureRecognizer:(UIGestureRecognizer *)preventingGestureRecognizer

canPreventGestureRecognizer:

レシーバが、ジェスチャーの認識から指定されたジェスチャーリコグナイザを防げることを示すためにオーバーライドされる.

- (BOOL)canPreventGestureRecognizer:(UIGestureRecognizer *)preventedGestureRecognizer

ignoreTouch:forEvent:

与えられたイベントの特定のタッチを無視することをジェスチャーリコグナイザに伝える.

- (void)ignoreTouch:(UITouch *)touch forEvent:(UIEvent *)event

initWithTarget:action:

アクションセレクタとターゲットが割り当てられたにジェスチャーリコグナイザオブジェクトを初期化する.

- (id)initWithTarget:(id)targetaction:(SEL)action

locationInView:

レシーバによって表されたジェスチャーの与えられたビュー内の位置の座標を計算して返す.

- (CGPoint)locationInView:(UIView *)view

locationOfTouch:inView:

与えられたビューのローカル座標系でジェスチャーのタッチのうちの一つの位置を返す.

- (CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(UIView *)view

numberOfTouches

レシーバによって表されるジェスチャーに含まれたタッチの番号を返す.

- (NSUInteger)numberOfTouches

removeTarget:action:

ジェスチャーリコグナイザオブジェクトからターゲットとアクションを削除する.

- (void)removeTarget:(id)targetaction:(SEL)action

requireGestureRecognizerToFail:

新たなジェスチャーリコグナイザとレシーバとの間に依存関係を作成する.

- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer

reset

ジェスチャーが認識された時に、内部の状態をリセットするためのオーバーライドされる.

- (void)reset

touchesBegan:withEvent:

関連づけられたビュー内で一つまたは複数のタッチダウンが行われたとき、レシーバに送られる.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

touchesCancelled:withEvent:

システムイベント(メモリ不足の警告のような)がタッチイベントをキャンセルした時にレシーバに送られる.

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

touchesEnded:withEvent:

関連づけられたビューから一つまたは複数の指が持ち上げられた時にレシーバに送られる.

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

touchesMoved:withEvent:

関連づけられたビュー内で一つまたは複数の指が移動した時にレシーバに送られる.

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

コンスタント

UIGestureRecognizerState

定数名概要
UIGestureRecognizerStatePossibleジェスチャーリコグナイザではまだそのジェスチャーを認識されていないが、タッチイベントを評価しているかもしれない.この状態がデフォルトの状態である.
UIGestureRecognizerStateBeganジェスチャーリコグナイザは連続のジェスチャーとして認識されたタッチオブジェクトを返す.また、ランループの次のサイクルにアクションメッセージを送信する.
UIGestureRecognizerStateChangedジェスチャーリコグナイザは連続のジェスチャーの変化として認識されたタッチを返す.また、ランループの次のサイクルにアクションメッセージを送信する.
UIGestureRecognizerStateEndedジェスチャーリコグナイザは連続のジェスチャーの終わりとして認識されたタッチを返す.また、ランループの次のサイクルにアクションメッセージを送信して、現在の状態をUIGestureRecognizerStatePossibleにリセットする.
UIGestureRecognizerStateCancelledジェスチャーリコグナイザは連続のジェスチャーでキャンセルされたタッチを返す.また、ランループの次のサイクルにアクションメッセージを送信して、現在の状態をUIGestureRecognizerStatePossibleにリセットする.
UIGestureRecognizerStateFailedジェスチャーリコグナイザはジェスチャーを認識することができなかったマルチタッチシーケンスを返す.このときアクションメッセージは送信されず、現在の状態をUIGestureRecognizerStatePossibleにリセットする.
UIGestureRecognizerStateRecognizedジェスチャーリコグナイザはジェスチャとしに認識されたマルチタッチシーケンスを返す.また、ランループの次のサイクルにアクションメッセージを送信して、現在の状態をUIGestureRecognizerStatePossibleにリセットする.

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-10-24 (日) 17:14:27 (2587d)