2

Web、特に StackOverflow で多くの質問が寄せられています。私は多くの答えをテストしますが、私の場合は何もうまくいきません。

私のクラスはプロトコルを実装していますUIGestureRecognizerDelegate:

@interface CDMapViewController : CDViewController <UIGestureRecognizerDelegate>

次のメソッドは、私のクラスの @implentation の xcode オートコンプリートから記述されています

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
shouldReceiveTouch:(UITouch *)touch {
    NSLog(@"not called");
    return NO;
}

2 番目、3 番目、4 番目のメソッドを正しく呼び出す最初のメソッドで UIGestureRecognizer を正しく初期化しました。

- (void)initGestureOnMap {
    UIGestureRecognizer *gestureRecognizer = [[UIGestureRecognizer alloc] init];
    gestureRecognizer.delegate = self;
    [self.view addGestureRecognizer:gestureRecognizer];
}

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  {
    [super touchesBegan:touches withEvent:event];
    gesture_dragging = NO;
}

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesMoved:touches withEvent:event];
    gesture_dragging = YES;
}

- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesEnded:touches withEvent:event];
    if (gesture_dragging || [touches count] != 1) return;
        /* bla bla bla */
}

... ログに記録されない – 呼び出されない ... なぜ?

4

1 に答える 1

2

superメソッドの実装を呼び出す必要がありtouchesます。

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event  {
    [super touchesBegan:touches withEvent:event];
    gesture_dragging = NO;
}

... and so on.

これらのメソッドは、ビュー コントローラーではなく、ビューに実装する必要があります。

必要なジェスチャーを選択します。それだけでUIGestureRecognizerはあまり効果がないので、 のようなものを選んでくださいUITapGestureRecognizer。次に、指定された初期化子を使用してジェスチャ認識エンジンを実装します。

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myMethod:)];

最後に、実装しmyMethod:ます。

-(void)myMethod:(UITapGestureRecognizer *)recognizer
{
    // Whatever this does.
}
于 2013-04-11T11:34:37.010 に答える