如何支持触摸跨各种对象移动?

时间:2011-05-02 05:40:50

标签: ios touchesmoved

我的应用中有一些像这样的标签......

enter image description here

我需要做的是,当点击标签时,我只是在屏幕底部显示标签名称。单独点击每个单元格时工作正常。但我想显示更改,即使用户点击特定标签并将他的手指移动到另一个标签上。也就是说,一旦他按下屏幕,他的手指移动的地方,我想追踪那些地方,并想要显示变化。我怎样才能做到这一点?请简要解释一下。

先谢谢

1 个答案:

答案 0 :(得分:0)

默认情况下,触摸事件仅发送到他们开始的视图。因此,您尝试做的最简单的方法是将所有标签放在容器视图中,以截取触摸事件,以及让容器视图决定如何处理事件。

首先为容器创建一个UIView子类,并通过覆盖hitTest:withEvent:拦截触摸事件:

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    // intercept touches
    if ([self pointInside:point withEvent:event]) {
        return self;        
    }
    return nil;
}

将该自定义类设置为容器视图的类。然后,在容器视图上实现各种touches*:withEvent:方法。在你的情况下,这样的事情应该有效:

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    // determine which view is under the touch
    UIView* view = [super hitTest:[[touches anyObject] locationInView:self] withEvent:nil];

    // get that label's text and set it on the indicator label
    if (view != nil && view != self) {
        if ([view respondsToSelector:@selector(text)]) {
            // update the text of the indicator label
            [[self indicatorLabel] setText:[view text]];
        }
    }
}