我有一个主视图。它有很多子视图。我使用以下代码来检测触摸的视图并将相应的视图置于前面。代码工作正常。但是当我将子视图添加到子视图时,它不起作用,任何请帮忙?
- (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:)])
{
}
else
{
}
如果我做对了,这非常简单:
hitTest
始终返回视图中最远的后代子视图。如果没有子视图,则始终是相同的视图。如果有,则可能会返回该子视图。以下是修复方法:
self.hitView = [super hitTest:point withEvent:event];
if ([self.hitView isDescendantOfView: self])
self.hitView = self;
编辑现在我更好地理解了这个问题,你也许应该执行以下操作。此代码返回超级视图,它是外部视图的直接后代:
UIView *hitView = [super hitTest:point withEvent:event];
while (hitView && hitView.superview != self)
hitView = hitView.superview;
(另请注意,您应该使用局部变量并稍后更改您的属性)。
正如您所说,您正在移动 UIView。您应该查看 WWDC 2010 的视频,其中他们使用新的 GestureRecognizer Class 实现了此效果。
您应该寻找的视频名称为“手势识别”。如果您找不到它,我可以在下班回家时链接它。
祝你好运!