我有一个包含10个字符标签(大字母)的视图。每个字符(标签)都有不同的标签。我正在开发的功能是“跟踪”。 当用户将手指移到视图上时,我想要检测触摸了哪个角色。 我想我要实施,
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
但我不知道如何识别标签上的触摸并识别角色。 有人可以帮助我吗?
答案 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;
然后只需检查报告触摸的视图的标记值,您就知道它是什么。