34

私はプログラミングとObjective Cには全く新しいです。私は空の画面とタイマーが1分かかるアプリケーションを作る方法が不思議でした。可能な限り早くタップすることができます。私はコードにUITapGestureRecognizerを実装する方法を知りました。私のアプリケーションにUITapGestureRecognizerを実装するにはどうすればいいですか?

+0

ヘルプあなた自身:不適切なフォーマットのhttps://github.com/nhahtdh/PS3/blob/master/Game/GameBlock.m – nhahtdh

答えて

86

これはあなたのクラスでジェスチャー認識機能を実装する方法のステップバイステップガイドです:

  1. UIGestureRecognizerDelegateプロトコルにあなたのクラスに準拠しています。

  2. ジェスチャ認識プログラムをインスタンス化します。例えば、UITapGestureRecognizerをインスタンス化するために、私たちは行います:

    ここ
    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)]; 
    

    は、アクションがジェスチャーを処理するセレクタです。ここでセレクタのhandleTapFromは次のようになります。

    - (void) handleTapFrom: (UITapGestureRecognizer *)recognizer 
    { 
        //Code to handle the gesture 
    } 
    

    セレクタの引数はジェスチャ認識器です。私たちは、など、UIGestureRecognizerStateBeganUIGestureRecognizerStateEnded、同様に、例えば、我々はジェスチャー認識の状態を見つけることができ、そのプロパティにアクセスするには、このジェスチャー認識を使用することができます

  3. インスタンス化されたジェスチャー認識上の所望の特性を設定します。たとえば、UITapGestureRecognizerの場合は、プロパティnumberOfTapsRequirednumberOfTouchesRequiredを設定できます。

  4. ジェスチャーを検出するビューにジェスチャー認識機能を追加します。私たちのサンプルコードでは、我々は次のコード行でImageViewのにジェスチャー認識機能を追加します(私はあなたの参照のためにそのコードを共有する):ビューにジェスチャー認識を追加した後

    [self.imageView addGestureRecognizer:tapGestureRecognizer]; 
    
  5. 、設定ジェスチャーレコグナイザーのためのデリゲート、つまりすべてのジェスチャーレコグナイザーのものを扱うクラス。

    tapGestureRecognizer.delegate = self; 
    

    注:ビューにジェスチャー認識を追加した後に、デリゲートを割り当て、当社のサンプルコードでは、それは次のようになります。それ以外の場合、アクションメソッドは呼び出されません。

+0

申し訳ありません! –

+0

あなたの助けを借りてくれてありがとう! –

+2

ごめんなさい。マークダウンフォーマットについては、学習曲線があります。 – nhahtdh

11
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)]; 
[self.tableView addGestureRecognizer:gestureRecognizer]; 
self.tableView.userInteractionEnabled = YES; 
gestureRecognizer.cancelsTouchesInView = NO; // this prevents the gesture recognizers to 'block' touches 
9

スウィフトでの例:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet var myUIImageView: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let singleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "myUIImageViewTapped:") 
     singleTap.numberOfTapsRequired = 1 
     singleTap.numberOfTouchesRequired = 1 
     self.myUIImageView.addGestureRecognizer(singleTap) 
     self.myUIImageView.userInteractionEnabled = true 
    } 

    func myUIImageViewTapped(recognizer: UITapGestureRecognizer) { 
     if(recognizer.state == UIGestureRecognizerState.Ended){ 
      println("myUIImageView has been tapped by the user.") 
     } 
    } 

} 
+2

そうです、userInteractionEnabledは必須です。ありがとう! –

+0

なぜ "recognizer.state == UIGestureRecognizerState.Ended"をチェックする必要があるのか​​分かりません。私はこれをテストし、それもそれなしで動作します。私の仮定は、マルチタップジェスチャ認識装置に必要なことですが、シングルタップではまだ必要ですか? – plam4u

0

あなたはスウィフト(iOS9)とSpriteKitベースで作業している場合は、以下を試してみてください。

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 
     let singleTap = UITapGestureRecognizer(target:self, action:#selector(self.handleSingleTap:)) 
     singleTap.numberOfTouchesRequired = 1 
     singleTap.addTarget(self, action:#selector(self.handleSingleTap)) 
     view.userInteractionEnabled = true 
     view.addGestureRecognizer(singleTap) 
    } 
    //event handler 
    func handleSingleTap(sender:UITapGestureRecognizer){ 
     print("tapped") 
    } 
} 
関連する問題