将触摸事件转发到另一个视图,该视图部分由接收事件的视图覆盖

时间:2013-12-12 19:09:19

标签: ios events uiview gesture touch-event

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

我有两个视图,具体来说,一个GMSMapView(来自谷歌地图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;
}

1 个答案:

答案 0 :(得分:1)

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

相关问题