转发手势到superview

时间:2014-12-09 22:33:24

标签: ios objective-c uiview uigesturerecognizer first-responder

所以我有这个场景:

-NavigationController
 -PageViewController
  -MapViewController
   -UIView
    -MKMapView (Full Screen)
  -OtherViewController

所以基本上,我希望它在捕获UIScreenEdgeGesture时切换页面(viewcontrollers)。但是将地图放在其中一个中,这不能正常工作。

我已经研究了很多(!)但仍然没有找到正确的解决方案。

我认为这里正确的方法是将此手势委托给层次结构中的nextResponder。

所以当用户在屏幕的左边缘滑动时,我已经成功捕获了手势。

现在我的问题是我无法将手势传递给UIView (MKMapView.superview)。 我有两个问题:

// 1.如何做到这一点  // 2.这是正确的方法吗?

请告诉我你对这个问题的看法!

编辑1: 添加一些故事板的代码和图像

UIScreenEdgePanGestureRecognizer *popRecognizer = [[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:[self.view superview] action:@selector(handlePopRecognizer:)];
popRecognizer.edges = UIRectEdgeLeft;
popRecognizer.delegate = self;

[self.mapView addGestureRecognizer:popRecognizer];

enter image description here

编辑2:我想要这种行为:Use UIScreenEdgePanGestureRecognizer without moving MKMapView

但是当识别出手势时,我希望它切换到左侧的页面(OtherViewController)

最终编辑:我提出的解决方法包括在地图上放置一个清晰的视图,从而产生所需的行为。对解决方案不满意,但它现在有效。

enter image description here

1 个答案:

答案 0 :(得分:0)

创建手势时,将目标设为超级视图,然后在超级视图中调用该方法以执行操作,例如:

    UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:[self.view superview] action:@selector(swipeHandler:)];

不知道MKMapView.superview是否可行,这取决于MKMapView是否是一个实例。很难知道你在没有代码的情况下所指的是什么。