【问题标题】:Forwarding a gesture to superview将手势转发到superview
【发布时间】:2015-02-08 00:09:58
【问题描述】:

所以我有这个场景:

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

所以基本上,我希望它在捕捉 UIScreenEdgeGesture 时切换页面(视图控制器)。但是将地图放在其中一个中,这将无法正常工作。

我对此进行了很多研究(!),但仍未找到正确的解决方案。

我相信这里正确的做法是将这个手势委托给层次结构中的 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];

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

但是当手势被识别时,我想让它切换到左边的页面(OtherViewController)

最终编辑:我想出的解决方法是在地图顶部放置一个清晰的视图,从而实现所需的行为。对解决方案不满意,但它现在有效。

【问题讨论】:

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


    【解决方案1】:

    创建手势时,将目标设为超级视图,并在超级视图中调用该操作的方法,例如:

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

    不知道 MKMapView.superview 是否可以工作,这取决于 MKMapView 是否是一个实例。没有代码很难知道你指的是什么。

    【讨论】:

    • 没有太多要添加的代码。我已经尝试过你的方法没有成功。我试图了解调用哪个方法以便页面控制器处理手势
    • 我使用的是默认的 pageviewcontroller,所以我想我应该调用 pageViewController:viewControllerBeforeViewController: 。但我猜目标不对。当我打印 self.view.superview 时,它返回 null。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多