子视图在父视图中接收其框架外的触摸

时间:2014-01-24 15:04:27

标签: ios uiview parent-child subview

我无法弄清楚为什么会发生这种情况,但我有一个UIView的子类,它被添加到我的视图控制器的视图中。

productView = [[SKUProductView alloc]initWithFrame:CGRectMake(60,768, 700, 550)];
[self.view addSubview:productView];

视图从屏幕外开始,将在平移手势事件的屏幕上显示动画。虽然视图在屏幕外,但它正在接收自己帧外的触摸事件。我通过覆盖子视图中的hitTest方法开发了一个解决方法,如果触摸事件在其框架之外,则将hitTest调用返回到superview。

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    //Test to determine if view is offscreen or if touch is outside its frame
    if (self.frame.origin.y >= 768 || point.x > self.frame.size.width)
    {
        return [super hitTest:point withEvent:event];
    }
    else if (point.y < kSKU_SCROLLVIEW_Y_OFFSET)
    {
        return [_productTabBar hitTest:point withEvent:event];
    }

    return _productScrollView;

}

但我想知道为什么我的子视图首先会在自己的框架外接收触摸事件?

1 个答案:

答案 0 :(得分:0)

为什么不使用

CGRectContainsPoint(rect, point);

确定触摸点是否在视野范围内?

可以肯定的是,在控制台上使用NSStringFromCGRect()功能在视图框架上打印,这样您就可以了解正在发生的事情。