0

何が悪いのかわかりません。以下は私のコードで、デリゲートメソッドを一度呼び出すと停止します。

私は何をすべきか?これらのデリゲートメソッドを使用するサンプルコードを見つけることができませんでした。私が見つけたのは、さまざまなデリゲートを使用した、スワイプとタップのジェスチャ認識機能だけでした。

これまでのコード:

-(void)initTouchesRecognizer{

    DLog(@"");

    recognizer = [[UIGestureRecognizer alloc] init];

    [self addGestureRecognizer:recognizer];

}


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{


    DLog(@"");


    NSSet *allTouches = [event allTouches];
    for (UITouch *touch in allTouches)
    {


    }

}




-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint location = [touch locationInView:touch.view];

}




- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
       DLog(@"");

}



- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
    [self touchesEnded:touches withEvent:event];
}

画像ビューのinitwithrectからinitTouchesRecognizerを呼び出します。

私は根本的に何を間違っていますか?

4

2 に答える 2

0

UIGestureRecognizerは抽象クラスであり、ビューに直接追加することは想定されていません。UITapGestureRecognizerやUIPanGestureRecognizerなど、UIGestureRecognizerから継承する具象サブクラスを使用する必要があります。独自の具象サブクラスを作成することもできますが、通常は必要ありません。

ビューにUIPanGestureRecognizerを追加する例を次に示します(ビュークラスコードでは、多くの場合、ジェスチャはコントローラーからビューに追加されます)。

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(mySelector:)];
[self addGestureRecognizer:panGesture];

この場合、ユーザーがこのビューでパンするたびにセレクターが呼び出されます。UITapGestureRecognizerを追加した場合、ユーザーがタップしたときにセレクターが呼び出されます。

詳細については、アップルのドキュメントを確認してください: http: //developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizer_basics/GestureRecognizer_basics.html#//apple_ref/doc/uid/TP40009541- CH2-SW2

また、Paul Hagertyのスタンフォード大学の講義は素晴らしいと思います。ジェスチャーレコグナイザーに関するものです: https ://itunes.apple.com/ca/course/6.-views-gestures-january/id593208016?i = 132123597&mt = 2

また、投稿したメソッドはいずれもデリゲートメソッドではなく、コードに追加したUIGestureRecognizerとは関係がないことも理解しておく必要があります。これらは、オーバーライドしているUIResponder(UIViewが継承するクラス)のインスタンスメソッドです。抽象UIGestureRecognizerにも同じ名前のインスタンスメソッドがありますが、クラスで呼び出されるのはUIGestureRecognizerメソッドではありません。

于 2013-02-16T20:17:35.327 に答える
0

ジェスチャレコグナイザを追加する必要はありませんでした。touchesMoved、touchesEnded、touchesBeganメソッドをオーバーライドすることで、画面全体でユーザーの指を追跡することができました。

単に:を呼び出さないでください。

-(void)initTouchesRecognizer

コード、および私が最初に投稿したコードは機能します。

于 2013-02-17T11:51:43.733 に答える