2012-03-27 208 views
0

其他然后设置UIGestureRecognizers:在UIGestureRecognizers,澄清需要在控制器

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

,使可用

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

一个视图的方法还有其它需要什么?如果没有,请问我错过了什么?当手势模拟,的NSLog不打印

+0

。你如何模拟滑动?你用UIAutomation来做这件事吗?那么你也必须在x方向上移动一点。 – dasdom 2012-03-27 20:12:30

+0

我相信刷卡不过是一小段距离的快速平移。 – JAM 2012-03-27 21:20:09

回答

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之前运行。即在v已经存在之后代码不在viewDidLoad中。如果你不确定一个简单的日志将确认它的存在:

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

如果这被证明是一条死胡同,我们肯定会要求对这一观点v更多信息。什么是超类?还有其他的识别器吗?它如何被添加到view

+0

+1我没有看到错误目标的设置。 – dasdom 2012-03-27 19:42:57

+0

@dasdom谢谢。但你的回答可能是对的。这将解释为什么他只是没有得到一个日志声明,而不是如果我是对的,他会得到的崩溃。 – NJones 2012-03-27 19:56:11

+0

我们来看看谁是对的。 – dasdom 2012-03-27 19:57:53

2

检查视图是否接受用户交互。这可以在故事板或通过[myView setUserInteractionEnabled: YES]完成。顺便说一句,

+0

+1我没有考虑过。 – NJones 2012-03-27 19:39:41

+0

试过了。好点,但问题仍未解决。 – JAM 2012-03-27 20:03:54