Ios5 通过UIgestureRecognitor同时处理两个不同点上的点击
我有两个标签在两个不同的位置,当两个标签同时点击时,我希望另一个标签显示成功消息 我如何做到这一点?我可以通过一个或多个手指触摸来识别单次轻触或双次轻触,但这是另一种情况。请帮忙。我试过这个,但不起作用Ios5 通过UIgestureRecognitor同时处理两个不同点上的点击,ios5,uigesturerecognizer,multi-touch,Ios5,Uigesturerecognizer,Multi Touch,我有两个标签在两个不同的位置,当两个标签同时点击时,我希望另一个标签显示成功消息 我如何做到这一点?我可以通过一个或多个手指触摸来识别单次轻触或双次轻触,但这是另一种情况。请帮忙。我试过这个,但不起作用 UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; tapRecognizer.nu
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.numberOfTouchesRequired = 2;
tapRecognizer.delegate = self;
[self.view addGestureRecognizer:tapRecognizer];
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if (touch.view == tap2 && touch.view == tap1)
{
result.text = @"success";
}
return YES;
}
提前感谢。您试图检测的并不是一个手势 我建议在每个按钮上添加一个轻触手势识别器。处理程序将:
- (void)handleButton1Tap:(UITapGestureRecognizer *)sender {
if (sender.state == UIGestureRecognizerStateEnded)
{
self.button1TapTime = CACurrentMediaTime();
[self testForSimultaneousTap];
}
}
- (void)handleButton2Tap:(UITapGestureRecognizer *)sender {
if (sender.state == UIGestureRecognizerStateEnded)
{
self.button2TapTime = CACurrentMediaTime();
[self testForSimultaneousTap];
}
}
- (void)testForSimultaneousTap
{
if (fabs(self.button1TapTime - self.button2TapTime) <= 0.2)
{
// Do stuff
}
}
-(无效)把手按钮1TAP:(UITAPPgestureRecognitor*)发送器{
if(sender.state==UIGestureRecognitizerStateEnded)
{
self.button1TapTime=CACurrentMediaTime();
[同步抽头自检];
}
}
-(无效)把手按钮2TAP:(UITAPPgestureRecognitor*)发送器{
if(sender.state==UIGestureRecognitizerStateEnded)
{
self.button2TapTime=CACurrentMediaTime();
[同步抽头自检];
}
}
-(无效)同时抽头的测试
{
如果(fabs(self.button1TapTime-self.button2TapTime)正式的话,我首先接受了termes的答案,这也行得通,但我找到了一个更简单的解决方案。不需要两个手势识别器,只需一个简单的轻触手势识别器,触摸次数为2即可实现。下面是代码:
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.numberOfTouchesRequired = 2;
tapRecognizer.delegate = self;
[self addGestureRecognizer:tapRecognizer];
-(void)handleTap:(UITapGestureRecognizer*)recognizer
{
if (recognizer.state == UIGestureRecognizerStateEnded)
{
CGPoint point1 = [recognizer locationOfTouch:0 self];
CGPoint point2 = [recognizer locationOfTouch:1 self];
if ([self validateTapIn:point1 and:point2])
{
resultLabel.text = @"success";
}
}
}
-(BOOL)validateTapIn:(CGPoint)point1 and:(CGPoint)point2
{
return
(CGRectContainsPoint(label1.frame, point1) && CGRectContainsPoint(label2.frame,:point2)) ||
(CGRectContainsPoint(label1.frame, point2) && CGRectContainsPoint(label2.frame, point1));
}
现在,在handle-tap方法中,我们可以通过UIGestureRecognitor类的实例方法“”轻松获得两个接触点。因此,在handleTap:
方法中,我们需要检查两个接触点是否位于所需位置。下面是代码:
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
tapRecognizer.numberOfTapsRequired = 1;
tapRecognizer.numberOfTouchesRequired = 2;
tapRecognizer.delegate = self;
[self addGestureRecognizer:tapRecognizer];
-(void)handleTap:(UITapGestureRecognizer*)recognizer
{
if (recognizer.state == UIGestureRecognizerStateEnded)
{
CGPoint point1 = [recognizer locationOfTouch:0 self];
CGPoint point2 = [recognizer locationOfTouch:1 self];
if ([self validateTapIn:point1 and:point2])
{
resultLabel.text = @"success";
}
}
}
-(BOOL)validateTapIn:(CGPoint)point1 and:(CGPoint)point2
{
return
(CGRectContainsPoint(label1.frame, point1) && CGRectContainsPoint(label2.frame,:point2)) ||
(CGRectContainsPoint(label1.frame, point2) && CGRectContainsPoint(label2.frame, point1));
}
谢谢tim的回答,请您在代码片段方面多帮我一点忙好吗?这将非常有帮助:)您认为如果我使用自定义手势识别器会不会更简单?请给出您的反馈。添加了一个代码片段(尽管我真的认为您可以自己处理!)。自定义手势很复杂,在这种情况下完全不合适,因为您在两个不同的视图上检测到了点击手势-您会将该手势附加到哪一个视图?非常感谢tim,您的解决方案确实有效,您完全正确无需自定义手势:)再次感谢:)