【问题标题】:Forward touch events to another view that is partially covered by the one that received the event将触摸事件转发到另一个被接收事件的视图部分覆盖的视图
【发布时间】:2013-12-31 08:57:46
【问题描述】:

我到处寻找这个问题的解决方案,但我的情况似乎有所不同。

我有两个视图,具体来说,一个 GMSMapView(来自 google maps api 的地图视图)占据整个屏幕,另一个视图位于地图顶部(不是它的子视图,而是部分覆盖它)。发生的情况是,当我用一根手指从第二个视图顶部开始捏,另一根手指在地图顶部捏时,地图没有得到手势。由于第二个视图有大的透明区域,我还希望如果我用一根手指在这些区域上平移,地图将获得手势(移动)但保持按钮(非地图视图的子视图)可点击。

我已经尝试在非地图视图的视图类文件中保留对地图视图的引用并实现了 hitTest 方法,但地图仍然没有得到任何接触......非常感谢

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    UIView *hitView = [super hitTest:point withEvent:event];

    // If the hitView is THIS view, return the map instead
    if (hitView == self)
    {
        return self.targetView; //the map view
    }
    // Else return the hitView (as it could be one of this view's buttons):
    return hitView;
}

【问题讨论】:

    标签: ios events uiview gesture touch-event


    【解决方案1】:

    在您的第二个视图中覆盖 pointInside 方法,如果该点出现在视图的某些可点击部分(如按钮等 - 检查该点是否在按钮框架内),则返回 YES,否则返回 NO。
    因此,如果用户点击第二个视图,并且如果您在 pointInside 中返回 NO,则 mapview 的 pointInside 将被调用,因此它将接收事件。如果返回 YES,mapView 的 poinInside 将不会被调用,因此 mapView 不会收到事件。
    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      相关资源
      最近更新 更多