UITapGestureRecognizer未在深层视图层次结构中触发

时间:2011-07-29 10:45:08

标签: iphone objective-c gestures

我已经在我的uiview层次结构中放置了一个UIGestureRecognizer但它没有被触发。以下是观点的一般地图:

UIScrollView> UIView> UIView> UIView>的的UIView

最后一个视图有手势识别器:

- (id)initWithFrame:(CGRect)frame {    
    self = [super initWithFrame:frame];

    if (self) {
        self.userInteractionEnabled = TRUE;

        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
        [self addGestureRecognizer:tap];
        [tap release];
    }  

    return self;
}

- (void)tap:(UIGestureRecognizer *)recognizer {
    NSLog(@"tap");
}

我正在设置scrollview的canCancelContentTouches以允许手势传播。

当我将带有手势的视图移动到滚动视图的正下方时,它可以正常工作。有人可以解释为什么它在深层次结构中不起作用吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

在此类层次结构中,您触摸的点必须位于视图框架和所有父框架内。响应者链从滚动视图开始,如果触摸在滚动视图之外,则它停在那里。然后它会检查scrollview的直接子节点,依此类推。

如果不是这种情况,我建议编写自己的hittest函数来检查最后一帧是否被击中然后返回。