限制用户使用一根手指触摸UIView,以避免出现帧问题

问题描述:

我知道有很多关于多指触摸和限制herethere的问题,但它们都不起作用。他们建议尝试设置独家触摸和禁用多点触摸即:限制用户使用一根手指触摸UIView,以避免出现帧问题

[self.view.subviews makeObjectsPerformSelector:@selector(setExclusiveTouch:) withObject:[NSNumber numberWithBool:YES]]; 
[self.view setMultipleTouchEnabled:NO]; 

注:Initially when I used self.view.exclusiveTouch = NO; ,it didn't work for me.Mr.Hlung's comment in the 1st link provided some useful info of enabling the subviews exclusive touch through selector.

但他们似乎工作incomplete.I有那里有上左,上right.User其相应的图像有多个图像的游戏图拖动左侧的图像我正在使用UIPanGestureRecognizer这样做。这里有一个场景,这是我的办公室里的测试人员进行的一些皮疹测试的结果:)

当用户对图像进行加扰时,他的手指全部/几个都会变得笨拙,会发生什么情况是这些帧会受到干扰,或者很少有图像会与另一个重叠。这是因为某些用户仍然可以使用多点触控,所以我想消除该特征。我是也知道有一个方法叫-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event,通过这个方法我们可以检测用户触摸的次数。如果我删除了所有用户触摸,如果计数大于1,即如果检测到超过1个手指触摸!

但是我发现没有方法有删除触动,我也试图最后触摸对象赋给通过我本以为这忽略检测到触摸的其余部分我的图像视图,即:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    if ([event allTouches].count>1) 
    { 
     UITouch *touch = [[touches allObjects] lastObject]; 
     self.dragObjectImageView = (UIImageView *)[touch view]; 
    } 
} 

即使这并未似乎没有用。

编辑,设置触摸的最大和最小数:

我还设置了移动手势的最大值和最小值没有触摸到1为好,即:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.view.subviews makeObjectsPerformSelector:@selector(setExclusiveTouch:) withObject:[NSNumber numberWithBool:YES]]; 

     for(UIImageView *iView in self.movableArray){ 
      if ([iView isMemberOfClass:[UIImageView class]]){ 
       UIPanGestureRecognizer * recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; 
       recognizer.minimumNumberOfTouches = 1; 
       recognizer.maximumNumberOfTouches = 1; 
       iView.multipleTouchEnabled = NO; 
       [iView addGestureRecognizer:recognizer]; 
       [iView setUserInteractionEnabled:YES]; 
       recognizer.delegate = self; 
      } 
     } 
} 

尝试另一种战术如果检测到多个触摸,则禁止图像的用户交互,但徒劳无益!

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    if ([event allTouches].count > 1) 
    { 
     for (UIView* view in self.view.subviews) 
     { 
      if ([view isKindOfClass:[UIImageView class]]) 
      { 
       [view setUserInteractionEnabled:NO]; 
      } 
     } 
    } 
    else 
    { 
     for (UIView* view in self.view.subviews) 
     { 
      if ([view isKindOfClass:[UIImageView class]]) 
      { 
       [view setUserInteractionEnabled:YES]; 
      } 
     } 
    } 
} 

也许有人会说,有不能是用户将使用多个手指play.But有人问我来解决这个问题,开发人员必须服从和尊重测试人员的角度,以及一个情况。

有人可以帮我摆脱这个问题。

感谢每一个提前:)

+0

你是否还设置了minimumNumberOfTouches和maximumNumberOfTouches为1为手势识别? – lukya

+0

是的,我也试过@lukya –

相反独占触摸设置我们自己的看法,打开相同的子视图或者我们分配以self.view工作过,在我的情况下,它是...

[gameView.subviews makeObjectsPerformSelector:@selector(setExclusiveTouch:) withObject:[NSNumber numberWithBool:YES]]; 

希望它可以帮助一些,谢谢:)

中为每个属性multipleTouchEnabled苹果文档中UIView Class Reference

multipleTouchEnabled

在同一窗口中其他的观点仍然可以接收触摸事件时 此房产是否如果您希望此视图专门处理多点触控事件 事件,请将此属性和专有触摸属性的值都设置为YES。

我在你的代码中看到的,你只为容器视图,而不是所有的图像视图设置setExclusiveTouch所有子视图,但setMultipleTouchEnabled。在设置专属触摸和单点触摸可能正常工作之前/之后添加以下行。

[self.view.subviews makeObjectsPerformSelector:@selector(setMultipleTouchEnabled:) withObject:[NSNumber numberWithBool:NO]]; 
+0

对不起,但它没有工作@lukya –

+0

我尝试设置独家触摸和禁用多点触摸gameView触摸开始或我在处理平移触摸,以及任何方式工作! ! –