0

画像ビューにUITapGestureをアタッチしています。いくつかの画像で同じジェスチャーを再利用したいと思います。そのためには、ハンドラーメソッドがどの画像からタップが来ているかを認識できる必要があります。以下の方法では、送信者の画像ビューのタグ値にアクセスしようとします。私はこの質問への回答に基づいていますhttps://stackoverflow.com/a/4425059/549273。ただし、デバッガーで「認識されないセレクターがインスタンスに送信されました」というエラーが表示されます。回答に記載されているとおりに試してみました。また、以下に示すように、パラメーターとしてメソッドに送信者を追加して試してみました。Netiherアプローチは機能します。誰かが私が間違ったことを見せてもらえますか?

- (void)viewDidLoad
{
    [super viewDidLoad];

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    topLeftImage.userInteractionEnabled = YES;
    [topLeftImage addGestureRecognizer:singleTap];

}

- (void)handleSingleTap:(UITapGestureRecognizer*)gestureView andSender:(id)sender {

    switch (((UIGestureRecognizer *)sender).view.tag)
    {
        case 0:
            NSLog(@"zero");
        case 1:
            NSLog(@"one");
    }

}
4

2 に答える 2

0

UIGestureRecognizer クラス リファレンスから:

呼び出されるアクション メソッドは、次のシグネチャのいずれかに準拠する必要があります。

  • (void)handleGesture;
  • (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer;

メソッド ( - (void)handleSingleTap:(UITapGestureRecognizer*)gestureView andSender:(id)sender) はどちらの署名にも準拠していません。これを超えて、ジェスチャ認識エンジンを作成するときは、@selector(handleSingleTap:)この関数と一致しないアクションを使用しているため、決して呼び出されるべきではありません。代わりにこれを試してください:

- (void)viewDidLoad
{
    [super viewDidLoad];

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    topLeftImage.userInteractionEnabled = YES;
    [topLeftImage addGestureRecognizer:singleTap];

}

- (void)handleSingleTap:(UIGestureRecognizer*)gestureView {

    switch (gestureView.view.tag)
    {
        case 0:
            NSLog(@"zero");
        case 1:
            NSLog(@"one");
    }

}
于 2012-09-18T03:22:37.260 に答える
0

(いつものように) @Inafziger に同意しますが、これを行うためのより良い方法があります: 個別のビューに個別のジェスチャ認識エンジンを配置します。

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[topLeftImage addGestureRecognizer:singleTap];

// just like first as far as the target and selector, but a distinct object
singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[bottomRightImage addGestureRecognizer:singleTap];

// and so on ...

これで、ハンドラは、どのビューにアタッチされているかを gr に尋ねることができます。タグなし、switch ステートメントなし。

- (void)handleSingleTap:(UIGestureRecognizer*)gr {
    UIImageView *theTappedView = (UIImageView *)gr.view
}
于 2012-09-18T03:28:01.607 に答える