Ios 多次滑动调用该方法的手势
我有一个小问题,em一直坚持。。我有一个自定义的Ios 多次滑动调用该方法的手势,ios,objective-c,uitableview,uigesturerecognizer,Ios,Objective C,Uitableview,Uigesturerecognizer,我有一个小问题,em一直坚持。。我有一个自定义的UITableViewCell,在它的textView上,我添加了2个手势、uitappostation和uiswippostate。。轻触手势工作正常,但滑动手势正在多次调用该方法。。有时会打两次电话,有时甚至更多……下面是我如何将它们添加到手机中的 //added in cellForRowAtIndexPath Method UITapGestureRecognizer *tapToTranslate = [[UITapGestureReco
UITableViewCell
,在它的textView
上,我添加了2个手势、uitappostation
和uiswippostate
。。轻触手势工作正常,但滑动手势正在多次调用该方法。。有时会打两次电话,有时甚至更多……下面是我如何将它们添加到手机中的
//added in cellForRowAtIndexPath Method
UITapGestureRecognizer *tapToTranslate = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapToTranslate:)];
[tapToTranslate setNumberOfTapsRequired:1];
[tapToTranslate setNumberOfTouchesRequired:1];
tapToTranslate.delegate = self;
[cell.messageContentView addGestureRecognizer:tapToTranslate];
UISwipeGestureRecognizer *swipeToTranslate = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(translateTo:)];
swipeToTranslate.numberOfTouchesRequired = 1;
swipeToTranslate.direction = UISwipeGestureRecognizerDirectionLeft;
swipeToTranslate.delegate = self;
[cell.messageContentView addGestureRecognizer: swipeToTranslate];
这里有很多方法
-(void)tapToTranslate:(UITapGestureRecognizer *)aGesture {}
-(void)translateTo:(UISwipeGestureRecognizer *)aGesture
{
aGesture.enabled = false;
}
我尝试在调用后在其方法中禁用滑动手势,但没有任何帮助
我还有uigesturecognizer
delegate方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
所以任何帮助都会很好…
先谢谢你
编辑1
<UITextView: 0x11322f700; frame = (18 10; 160.865 69.2656); text = '你怎么样? How are you doing?'; clipsToBounds = YES; gestureRecognizers = <NSArray: 0x11322fbd0>; layer = <CALayer: 0x11322fac0>; contentOffset: {0, 0}>
对于不同的状态,如
UIGestureRecognitizerStateBegind
、UIGestureRecognitizerStateEnded
,UIGestureRecognitizerStateEnded,UIGestureRecognitizer确实多次调用该函数。它还在刷卡时不断调用函数,这可以在下面的最后一条else语句中处理。在“滑动手势”功能中,执行以下操作:
-(void)translateTo:(UISwipeGestureRecognizer *)aGesture
{
if (recognizer.state == UIGestureRecognizerStateBegan)
{
//do something
}
else if(recognizer.state==UIGestureRecognizerStateEnded)
{
}
else
{
//do something while it is swiping
}
}
下面的答案可能与您的意图不符,但仍可能对您有所帮助:问题是,Tableview有自己的手势识别器。通过在tableview上添加额外的手势,它不知何故会与调用手势混淆。这可能就是这个问题的原因。这就是解决办法
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
if ([gestureRecognizer.view isKindOfClass:[UITableView class]]) {
...
} else {
...
}
}
您可以使用此功能识别同步手势。删除
手势后。delegate=self代码>行从两个手势中,该方法开始调用一次,就像它假设的那样。显然是为我做的。因此,对于任何面临此问题的人,他们都可以尝试删除手势的委托及其方法。是的,我认为这可能是问题所在……你知道如何解决它吗?请检查解决方案,现在它成为了一个答案:)我尝试了这个。。新增返回号
对于UITableView类的手势
和YES
对于另一个,但仍在做相同的事情…您的要求只是向左滑动?它总是调用uigestureRecognitizerStateEnded。。永远不要进去,否则…刷卡是一个离散的手势“刷卡是一个离散的手势”的意思是?@AhmedZ。手势有两种,一种是离散的,另一种是连续的。离散手势没有开始状态。@KudoCC离散手势并不意味着它们没有开始状态。刷卡手势有一个开始状态并被调用。你能在cellforrowatinexpath
方法中显示整个代码吗?尝试将登录-(void)translate添加到:(uisweegestureerecognizer*)aGesture
,NSLog(@“%@”,aGesture.view)代码>让我们看看它是否是相同的视图。好的,我正在尝试这个NSLog..用我得到的编辑了问题它是否始终显示相同的UITextView:0x11322f700?是的…突然删除委托=self代码>已使其工作…。