在UIGestureRecognizer上,需要澄清

时间:2012-03-27 19:25:13

标签: ios

然后在Controller中设置UIGestureRecognizers:

UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] 
               initWithTarget:v action:@selector(handleSwipe:)];
swipeGesture.direction= UISwipeGestureRecognizerDirectionUp;
[v addGestureRecognizer:swipeGesture];

在视图中制作方法

-(void)handleSwipe:(UISwipeGestureRecognizer *)sender {
    NSLog(@"Swipe detected");
}

还有什么需要吗?如果没有,请问我缺少什么?模拟手势时,NSlog不打印

2 个答案:

答案 0 :(得分:2)

修改

我从your recent question看到你也在使用平移手势识别器。手势识别器并不真正知道如何在没有指令的情况下与对方一起玩得很好。您有两个主要选项

1)其中一个:

[panGesture requireGestureRecognizerToFail:swipeGesture];

如果触摸不是滑动,则仅触发平移。或 -

2)两个同时:

遵守UIGestureRecognizerDelegate协议。

设置代理人:

panGesture.delegate = self;
swipeGesture.delegate = self;

并实施方法:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}

<强>原始

现在您将视图v设置为识别器的目标,因此当检测到滑动时识别器会调用:

[v handleSwipe:self];

您的两种方法似乎更有可能位于视图控制器中。如果是这种情况,则init方法应如下所示:

UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] 
           initWithTarget:self action:@selector(handleSwipe:)];

由于v是预定目标,因此您的代码很好;我认为下一个最可能的原因是你的第一块代码在视图v加载之前运行。即viewDidLoad已存在后,代码不在v中。如果你不确定一个简单的日志会确认它的存在:

NSLog(@"v is %@",v);

如果证明这是一个死胡同,我们肯定会要求有关此视图v的更多信息。什么是超类?还有其他识别器吗?如何将其添加到view

答案 1 :(得分:2)

检查视图是否接受用户交互。这可以在情节提要或通过[myView setUserInteractionEnabled: YES]完成。