web-dev-qa-db-ja.com

UITapGestureRecognizerをアプリケーションに実装する方法

私はプログラミングとObjective Cを初めて使用します。空白の画面と1分間続くタイマーを備えたアプリを作成する方法を知りたいと思っていました。あなたはできるだけ早く、できるだけ長くタップすることを意図しています。 UITapGestureRecognizerをコードに実装する方法を知りたいと思っていました。

42
objective_c_pro

これは、クラスにジェスチャレコグナイザーを実装する方法に関するステップバイステップガイドです。

  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の場合、プロパティnumberOfTapsRequiredおよびnumberOfTouchesRequiredを設定できます。

  4. ジェスチャを検出するビューにジェスチャレコグナイザを追加します。サンプルコード(参照用にこのコードを共有します)では、次のコード行を使用してジェスチャレコグナイザーをimageViewに追加します。

    [self.imageView addGestureRecognizer:tapGestureRecognizer];
    
  5. ジェスチャレコグナイザをビューに追加した後、ジェスチャレコグナイザのデリゲート、つまり、すべてのジェスチャレコグナイザのものを処理するクラスを設定します。サンプルコードでは、次のようになります。

    tapGestureRecognizer.delegate = self;
    

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

94
Mathew Varghese
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
14
user3098709

Swiftの例:

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.")
        }
    }

}
13
King-Wizard

Swift(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")
    }
}
0
dbbudd