私はプログラミングとObjective Cにまったく慣れていません。空白の画面と1分間のタイマーを持つアプリを作成する方法を知りたいと思っていました。できるだけ速く、できるだけ長くタップすることを意図しています。UITapGestureRecognizer
を自分のコードに実装する方法を考えていました。
5 に答える
これは、クラスにジェスチャ認識エンジンを実装する方法に関する段階的なガイドです。
クラスを
UIGestureRecognizerDelegate
プロトコルに準拠させます。ジェスチャ レコグナイザをインスタンス化します。たとえば、 a をインスタンス化するには、次の
UITapGestureRecognizer
ようにします。UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
ここで、action はジェスチャーを処理するセレクターです。ここで、セレクターの handleTapFrom は次のようになります。
- (void) handleTapFrom: (UITapGestureRecognizer *)recognizer { //Code to handle the gesture }
セレクターへの引数は、ジェスチャ レコグナイザーです。このジェスチャ認識エンジンを使用して、そのプロパティにアクセスできます。たとえば、、、などのジェスチャ認識エンジンの状態を見つけることができ
UIGestureRecognizerStateBegan
ますUIGestureRecognizerStateEnded
。インスタンス化されたジェスチャ レコグナイザで必要なプロパティを設定します。たとえば、 の場合
UITapGestureRecognizer
、プロパティnumberOfTapsRequired
、およびを設定できnumberOfTouchesRequired
ます。ジェスチャを検出するビューにジェスチャ レコグナイザーを追加します。サンプル コード (参照用にそのコードを共有します) では、次のコード行を使用してジェスチャ レコグナイザーを imageView に追加します。
[self.imageView addGestureRecognizer:tapGestureRecognizer];
ジェスチャ レコグナイザをビューに追加した後、ジェスチャ レコグナイザのデリゲート、つまりすべてのジェスチャ レコグナイザを処理するクラスを設定します。サンプル コードでは、次のようになります。
tapGestureRecognizer.delegate = self;
注:ジェスチャ レコグナイザーをビューに追加した後、デリゲートを割り当てます。それ以外の場合、アクション メソッドは呼び出されません。
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