如何在另一个视图后面接收触摸事件?

时间:2014-07-07 04:32:48

标签: ios objective-c cocoa-touch uigesturerecognizer

我在视图中有两个子视图。框架是平等的。视图具有向左滑动手势识别器,B视图具有向右滑动手势识别器。 B在A后面,所以我只能触发向左滑动手势。我怎么能同时收到?

2 个答案:

答案 0 :(得分:2)

  1. 后面的视图不会响应,因为它位于后面。
  2. 如果两个手势同时响应(同时向左+向右),请按照下面的建议添加UIGestureRecognizerDelegate并处理shouldRecognizeSimultaneouslyWithGestureRecognizer
  3. 如果您希望B响应手势,即使它被A部分隐藏,请重新考虑您的层次结构:在A& A之上添加第3个视图B(称之为C),与B相同的大小,作为手势识别器的占位符。
  4. 您的代表:

    // leftGesture
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
        shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer
        *)otherGestureRecognizer
    {
        return otherGestureRecognizer == rightGesture;
    }
    

答案 1 :(得分:1)

  

我怎样才能同时收到?

将两个手势识别器添加到视图A,因为这是前面的视图。由于您需要通过视图B处理正确的滑动手势,因此将视图B设为右滑动手势识别器的目标。

更好的选择可能是让您的视图控制器成为两个手势识别器的目标,并让它理清如何处理用户的手势。这有助于从了解如何设置用户界面的业务中获取视图 - 他们只需要遵循视图控制器的指令。如果您采用该计划,您的视图控制器可能会部分显示:

- (void)viewDidLoad
{
    UISwipeGestureController *leftSwipe = [[UISwipeGestureController alloc] initWithTarget:self action:@selector(leftSwipe:)];
    leftSwipe.direction = UISwipeGestureRecognizerDirectionLeft; 
    UISwipeGestureController *rightSwipe = [[UISwipeGestureController alloc] initWithTarget:self action:@selector(rightSwipe:)];
    rightSwipe.direction = UISwipeGestureRecognizerDirectionRight;

    [self.viewA addGestureRecognizer:leftSwipe];
    [self.viewA addGestureRecognizer:rightSwipe];
}

- (IBAction)leftSwipe:(id)sender
{
    [self.viewA doSomething];
}

- (IBAction)rightSwipe:(id)sender
{
    [self.viewB doSomethingElse];
}
相关问题