代码之家  ›  专栏  ›  技术社区  ›  tybro0103

使用UitapGestureRecognizer

  •  4
  • tybro0103  · 技术社区  · 14 年前

    iPhone开发人员的新功能。我有一个视图,其中包含一个uiScrollView,其中包含一个uiImageView。我在图像视图中添加了一个(双击)手势识别器,它会打开一个警报框。因为某种原因,我确信我只是个弱智,它开了三次。

    以下是我的代码:

    - (void)viewDidLoad {
    
        scrollView.delegate = self;
    
        UIImage* image = imageView.image;
        imageView.bounds = CGRectMake(0, 0, image.size.width, image.size.height);
        scrollView.contentSize = image.size;
    
        UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapGesture:)];
        tapGesture.numberOfTapsRequired = 2;
        [imageView addGestureRecognizer:tapGesture];
        [tapGesture release];
    
        NSLog(@"LOADED");
    
        [super viewDidLoad];
    }
    
    -(IBAction) handleTapGesture:(UIGestureRecognizer *) sender {
        CGPoint tapPoint = [sender locationInView:imageView];
        int tapX = (int) tapPoint.x;
        int tapY = (int) tapPoint.y;
        NSLog(@"TAPPED X:%d Y:%d", tapX, tapY);
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello" message:@"How are you?" delegate:nil cancelButtonTitle:@"I'm awesome." otherButtonTitles:nil];
        [alert show];
        [alert release];
    }
    

    几天前我刚开始开发iPhone。这个问题让我想起了我在JavaScript中处理过的事件冒泡问题。有什么想法吗?

    1 回复  |  直到 13 年前
        1
  •  10
  •   user467105    14 年前

    -(void) handleTapGesture:(UIGestureRecognizer *) sender {
        CGPoint tapPoint = [sender locationInView:imageView];
        int tapX = (int) tapPoint.x;
        int tapY = (int) tapPoint.y;
        NSLog(@"TAPPED X:%d Y:%d", tapX, tapY);
        [self performSelector:@selector(showMessage) withObject:nil afterDelay:0.0];
    }
    
    - (void)showMessage
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello" message:@"How are you?" delegate:nil cancelButtonTitle:@"I'm awesome." otherButtonTitles:nil];
        [alert show];
        [alert release];
    }
    


    -(void) handleTapGesture:(UIGestureRecognizer *) sender {
        if (sender.state != UIGestureRecognizerStateEnded)  // <---
            return;                                         // <---
    
        CGPoint tapPoint = [sender locationInView:imageView];
        int tapX = (int) tapPoint.x;
        int tapY = (int) tapPoint.y;
        NSLog(@"TAPPED X:%d Y:%d", tapX, tapY);
    
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello" message:@"How are you?" delegate:nil cancelButtonTitle:@"I'm awesome." otherButtonTitles:nil];
        [alert show];
        [alert release];
    }