我无法弄清楚为什么会发生这种情况,但我有一个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;
}
但我想知道为什么我的子视图首先会在自己的框架外接收触摸事件?
答案 0 :(得分:0)
为什么不使用
CGRectContainsPoint(rect, point);
确定触摸点是否在视野范围内?
可以肯定的是,在控制台上使用NSStringFromCGRect()
功能在视图框架上打印,这样您就可以了解正在发生的事情。