Ios UITableViewcell和UITableVIew上的手势识别器
我有一个cutsom UITableViewCell实现。 我已将UITableViewCell的这个子类注册为UIPangestureRecognitor,我使用它来向右或向左滑动单元格 //在UITableViewCell子类中:Ios UITableViewcell和UITableVIew上的手势识别器,ios,uitableview,uigesturerecognizer,uiswipegesturerecognizer,Ios,Uitableview,Uigesturerecognizer,Uiswipegesturerecognizer,我有一个cutsom UITableViewCell实现。 我已将UITableViewCell的这个子类注册为UIPangestureRecognitor,我使用它来向右或向左滑动单元格 //在UITableViewCell子类中: UIGestureRecognizer* recognizer = [[UIPanGestureRecognizer alloc] initWithTarget: self action:@selector(handlePan:)]; r
UIGestureRecognizer* recognizer =
[[UIPanGestureRecognizer alloc] initWithTarget:
self
action:@selector(handlePan:)];
recognizer.delegate = self;
[self addGestureRecognizer:recognizer];
recognizer.cancelsTouchesInView = NO;
现在我想展示一个视图控制器,当用户用两个手指“向上”滑动时
在屏幕上。
因此,我在tableview中添加了一个UISweepGestureRecognitor
//视图控制器中包含tableview引用的代码
UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleViewsSwipe:)];
[swipe setDirection:UISwipeGestureRecognizerDirectionUp];
[swipe setDelaysTouchesBegan:NO];
[[self tableView ]addGestureRecognizer:swipe];
swipe.cancelsTouchesInView= YES;
[swipe setNumberOfTouchesRequired:2];
swipe.delegate = self;
self.tableView.multipleTouchEnabled = YES;
但当我用两个手指在屏幕上滑动时,平移手势就会被触发。
我如何解决这个问题呢?正如苏珀所说,将MaximumNumberOfTouchs设置为1可能会起作用 对于试图同时处理两个手势识别器(都是单触手势)的其他人,我发现确保将此代理设置为“是”
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
return YES;
}
然后在手势识别器操作中,您可以检查特定的翻译或任何您需要的内容,并取消其中一个手势识别器
例如:
- (void)panSwipeRecognizer:(UIPanGestureRecognizer*)panRecognizer
{
CGPoint translation = [panRecognizer translationInView:self.superview];
if(panRecognizer.state == UIGestureRecognizerStateBegan)
{
if(fabsf(translation.x) < fabsf(translation.y))
{
//deactivate horizontal gesture recognizer
panRecognizer.enabled = NO;
panRecognizer.enabled = YES;
}
else //if(fabsf(translation.x) > fabsf(translation.y))
{
//deactivate vertical gesture recognizer
otherGestureRecognizer.enabled = NO;
otherGestureRecognizer.enabled = YES;
}
}
//other statements like stateChanged and stateBegan
}
-(无效)Pansweep识别器:(UIPangestureRecognitor*)PanRecognitor
{
CGPoint translation=[panRecognizer translationView:self.superview];
if(panRecognizer.state==UIgestureRecognitizerStateStart)
{
if(fabsf(translation.x)fabsf(translation.y))
{
//停用垂直手势识别器
otherGestureRecognizer.enabled=否;
otherGestureRecognizer.enabled=是;
}
}
//其他语句,如stateChanged和stateStart
}
这可能是因为您尚未为ui测试识别器设置MaximumNumberOfTouchs
属性。设置recognizer.MaximumNumberOfTouchs=1代码>