Pan Gesture在我的自定义视图中使用Tap手势

时间:2013-11-30 15:08:06

标签: objective-c uiview ios7 uipangesturerecognizer

我遇到了一个问题,我希望有人可以帮助我。

我的视图有一个平移手势,可以正常工作,我可以平移我显示的图像。这是唯一添加的手势。

然后我添加一个UIView(一个名为headerView的自定义视图),上面有按钮,我以编程方式添加..

  • 正确显示按钮
  • 我已将其委托设为自我
  • 我已确认正在设置按钮的选择器
  • 我之前在另一个表单上使用过headerView,按钮工作正常。
  • 我把headerView带到了“前面”

我遇到的问题是,在这个带有平移手势的表单上,我的headerView上的按钮不响应我的水龙头。如果我直接在我的headerView上进行平移,我可以在底层图像周围移动,因此平移手势似乎超过了我的headerView上的轻击手势,阻止我的任何标题按钮工作。

如何修复它,以便平移手势不会阻止我在headerView中点击?

谢谢!

解决了一些...... 要更新这篇文章。我通过手动设置headerView来获得响应......

self.headerView = [[OAPhotoHeaderView alloc] initWithFrame:CGRectMake( 0.0f, 0.0f, self.view.window.bounds.size.width, 100.0f) buttons:OAPhotoHeaderButtonsComment| OAPhotoHeaderButtonsLike |OAPhotoHeaderButtonsFlag];//was 44.0f
self.headerView.delegate = self;
[self.headerView setUserInteractionEnabled:YES];
self.headerView.backgroundColor = [UIColor grayColor];
self.headerView.photo=user;
[self.headerView setPhoto:self.userPhotoObject];//  self.myUserPhotoObject];
[self.headerView.likeButton setUserInteractionEnabled:YES];
//[self.headerView.likeButton addTarget:self action:@selector(didTapLikePhotoButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[self.headerView setUserInteractionEnabled:YES];
[self.headerView setOpaque:YES];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self.headerView action:@selector(didTapLikePhotoButtonAction:)];
[tap setNumberOfTouchesRequired:1];
[tap setNumberOfTapsRequired:1];
[self.headerView addGestureRecognizer:tap];
[self setExclusiveTouchForButtons:self.headerView];

这实际上会激活headerView类中的按钮处理程序,就像有人按下按钮一样。但是,这不起作用,因为他们可以按下headerView上的任何地方,它将触发。我似乎无法找到将敲击手势分配给按钮的正确方法

[self.headerView.likeButton addGestureRecognizer:tap]

不起作用。此外,这也不起作用......

[self.headerView.likeButton addTarget:self action:@selector(didTapLikePhotoButtonAction:) forControlEvents:UIControlEventTouchUpInside];

2 个答案:

答案 0 :(得分:0)

您应该添加另一种手势识别方法,以便在您点按按钮时取消它:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
     // Replace to your view with button
    if ((self.headerView isDescendantOfView:touch.view))
    {
        return NO;
    }
    return YES;
}

请记住将视图控制器添加为手势识别器的代理。 希望这有帮助。

答案 1 :(得分:0)

每当我无法触摸我的某些东西时,事实证明该对象是可见的,但实际上并不在包含视图的范围内 - 因为视图没有设置clipToBounds。也许您包含的视图边界不是您认为的那样。无论如何,还有另一种追求的途径。