2011-01-18 8 views
1

の中で特定の1 UIGestureRecognizerを検索し、削除ねえ、みんな、ビューからremoveGestureRecognizer:にしようとしたとき、私は、問題に会った私は何をしたいのかいくつかの同じ名前のUIGestureRecognizers

imageView秒のdoubleTap一つであり、および削除しますimageViewのシングルタップジェスチャーをタップし、他のタップを削除しないでください。imageViewシングルタップジェスチャー。 .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]); 

} 

が、私が書いたこれらの行は、まさにsingleTapを見つけることができません。ここに

は私が望む、ジェスチャーやメカニズムを生成する方法でありますダブルタップされた画像ビューに付けられたジェスチャ。

NSLogが.gestureRecognizers countの場合は、それでも2、削除されたのは最後のimageViewのシングルタップジェスチャーで、1になりました。

私は最初と2番目のものを見つけることができません、それらを見つけるためのアイデア?お読みいただきありがとうございました:)

答えて

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]; 
       } 
      } 
     } 
    } 
+0

。 'for(UIGestureRecognizer * [imageView gestureRecognizers]のジェスチャー){' – Jules

+0

私は同意して応答を更新します。 –

関連する問題