(UIView *)hitTest问题?

时间:2010-09-21 08:08:19

标签: iphone ipad uiview uiviewcontroller

我有一个Masterview.it有很多childviews。我使用下面的代码来检测触摸的视图并带来相应的视图。代码工作正常。但是当我将子视图添加到子视图时,它不起作用,请帮忙吗?

 - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;
 {
self.hitView = nil;
self.hitView = [super  hitTest:point withEvent:event];
int x =  self.hitView.frame.origin.x;
int y =  self.hitView.frame.origin.y;
NSLog(@"x = %d",x);
NSLog(@"y = %d",y);
if ([self.viewDelegate respondsToSelector:
         @selector(view:hitTest:withEvent:hitView:)])
{
    return [self.viewDelegate view:self hitTest:point
                             withEvent:event hitView:hitView];
}
else
{

       [self bringSubviewToFront:self.hitView];
    return hitView;
}

}

2 个答案:

答案 0 :(得分:8)

如果我做对了,那很简单:hitTest总是返回视图中最远的后代子视图。如果没有子视图,则始终是相同的视图。如果有,则可能会返回该子视图。以下是您可以解决的问题:

self.hitView = [super hitTest:point withEvent:event];
if ([self.hitView isDescendantOfView: self])
  self.hitView = self;

编辑现在我已经更好地理解了这个问题,您应该执行以下操作。此代码返回superview,它是外部视图的直接后代:

UIView *hitView = [super hitTest:point withEvent:event];
while (hitView && hitView.superview != self)
  hitView = hitView.superview;

(另请注意,您应该使用本地变量并在以后更改您的属性。)

答案 1 :(得分:0)

正如你所说,你正在移动UIViews。您应该查看WWDC 2010中使用新GestureRecognizer Class实现此效果的视频。

你应该寻找的视频被命名为“手势识别”。如果你找不到它,我可以在下班回家时链接它。

祝你好运!