iphone - 带标签的UIView,当手指移动时检测触摸

时间:2011-06-09 14:33:54

标签: iphone touch

我有一个包含10个字符标签(大字母)的视图。每个字符(标签)都有不同的标签。我正在开发的功能是“跟踪”。 当用户将手指移到视图上时,我想要检测触摸了哪个角色。 我想我要实施,

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

但我不知道如何识别标签上的触摸并识别角色。 有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

如果您想知道触摸开始的视图(用户将手指放在哪个视图上),您可以阅读NSSet中返回的任何触摸项,如下所示:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSInteger viewTag = [[[touches anyObject] view] tag];

    //Check your view using the tags you've set...
}

但是,即使手指在屏幕上移动,此view属性也只会返回最初触摸的视图,而不会返回当前手指下的视图。要做到这一点,您需要跟踪当前触摸的坐标并确定它落入哪个视图,可能是这样的:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];

    CGPoint point = [touch locationInView:self.view]; 

    //If all your views are collected as an array
    for(UIView *view in views) {
        if (CGRectContainsPoint([view frame], point))
        {
            //Bingo
        }
    }
}

成功的关键是确保您在坐标参考正确的视图时接触,因此请务必使用与您的应用程序匹配的值适当地调用locationInView:CGRectContainsPoint()查看层次结构以及放置此代码的位置(即View,ViewController等)

希望有帮助!

答案 1 :(得分:0)

要检测简单触摸,您可以使用UIGestureRecognizer。阅读文档以获取更多相关信息。对于更复杂的操作,您需要实现:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 

要确定触摸了哪个项目,您可以提供商品的标签值:

myView.tag = 4;

然后只需检查报告触摸的视图的标记值,您就知道它是什么。