UIGestureRecognizer Class

Overview

UIGestureRecognizer is an abstract base class for concrete gesture-recognizer classes. A gesture-recognizer object—or, simply, a gesture recognizer—decouples the logic for recognizing a gesture and acting on that recognition. When one of these objects recognizes a common gesture or, in some cases, a change in the gesture, it sends an action message to each designated target object.

Apple Developer Documentation

UIGestureRecognizerClassはベースとなる抽象クラスでジェスチャーを認識するクラスで色々できるみたいですね。

基本的には各動作毎にサブクラスがあるのでそちらを使っていく感じでしょうか。

UITapGestureRecognizer タップ
UIPinchGestureRecognizer ピンチイン,ピンチアウト(呼びなれないですが拡大や縮小でやってるジェスチャ)
UIRotationGestureRecognizer ローテーション(回転ですね。ゲームでバルブを回す時とかにやった気がします)
UISwipeGestureRecognizer スワイプ
UIPanGestureRecognizer パン(ドラッグのことだそうです)
UIScreenEdgePanGestureRecognizer エッジ(角)からのドラッグ。ページめくる時とかに使いそうなきがします
UILongPressGestureRecognizer 長押し。タップし続けるやつ

XcodeのObject Libraryだとこの辺。EDGEはないですね。
f:id:arcright:20140704122131p:plain

UIGestureRecognizerのstateプロパティで状態がわかる

ドラッグ&ドロップを感知したくなりました。ドラッグはUIPanGestureRecognizerで拾えるんですがドロップはどうすればいいんでしょうか?
ドロップはドラッグが終了した時点と等しいのでUIPanGestureRecognizerのstateプロパティを見てEndedになった時がドロップというふうに解釈すればよさそうです。

ちなみに状態はこのように遷移するらしいです。

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

Apple Developer Documentation
- (IBAction)dropSita:(UIPanGestureRecognizer *)sender {
    switch (sender.state) {
        case UIGestureRecognizerStateEnded:
            NSLog(@"ドロップ!");
            break;
        default:
            break;
    }
}