1

やあみんな、私はremoveGestureRecognizer:ビューからしようとしたときに問題に遭遇しました、

私がやりたいのは s のdoubleTap1 つで、他の s singleTap Gesture を削除せずにimageView、タップされたsingleTap Gesture を削除します。imageViewimageView

ビュー、ジェスチャー、およびメカニズムを生成する方法は次のとおりです。

.h

UITapGestureRecognizer *singleTap;

.m

- (void)viewDidLoad 
{
    [super viewDidLoad];
    NSInteger i;
    for (i = 1; i <= 3; i++) 
    {
        UIImageView *imageView = [[UIImageView alloc] init];
        imageView.frame = CGRectMake(110, 70+80*(i-1), 100, 60);
        imageView.backgroundColor = [UIColor whiteColor];
        imageView.tag = i;
        imageView.userInteractionEnabled = YES;
        [self.view addSubview:imageView];

        UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doubleMethod:)];
        doubleTap.numberOfTapsRequired = 2;

        singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleMethod:)];
        [singleTap requireGestureRecognizerToFail:doubleTap];

        [imageView addGestureRecognizer:doubleTap];
        [imageView addGestureRecognizer:singleTap];
    }
}
- (void)singleMethod: (id)sender
{
    NSLog(@"SingleTap");
}
- (void)doubleMethod: (id)sender
{
    NSLog(@"%d",[((UITapGestureRecognizer *)sender).view.gestureRecognizers count]);

    UIImageView *imageView = nil;
    NSArray *tryToFindYou = [self.view subviews];
    for (imageView in tryToFindYou) 
    {
        if ([imageView isKindOfClass:[UIImageView class]] && imageView.tag == ((UITapGestureRecognizer *)sender).view.tag) 
        {
            [imageView removeGestureRecognizer:singleTap];
        }
    }

    NSLog(@"%d",[((UITapGestureRecognizer *)sender).view.gestureRecognizers count]);

}

しかし、私が書いたこれらの行は、ダブルタップされたimageViewに添付されたsingleTap Gestureを正確に見つけることができません.

を NSLog すると.gestureRecognizers count2 のままで、外したのは最後imageViewの singleTap Gesture で、1 になりました。これは正しいです。

1 番目と 2 番目のものを見つけることができません。それらを見つけるためのアイデアはありますか? 読んでくれてありがとう :)

4

1 に答える 1

10

次のように、ジェスチャーが追加される UIView クラスのgestureRecognizersプロパティを循環する必要があります。

for (imageView in tryToFindYou) 
    {
        if ([imageView isKindOfClass:[UIImageView class]] && imageView.tag == ((UITapGestureRecognizer *)sender).view.tag) 
        {
            for(UIGestureRecognizer *gesture in [imageView gestureRecognizers])
            {
               if([gesture isKindOfClass:[UITapGestureRecognizer class]])
               {
                 if (gesture.numberOfTapsRequired == 1) 
                    [imageView removeGestureRecognizer:gesture];
               }
            }
        }
    }
于 2011-01-18T07:27:43.260 に答える