我知道有很多关于多指触摸和限制here和there的问题,但是它们似乎都不起作用。他们建议的是尝试设置独占触摸并禁用多点触控,即:
[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.
但它们似乎工作不完整。我有一个游戏视图,左边有多个图像,右边有相应的图像。用户必须将左图拖到相应的右图并匹配它。我正在使用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];
}
}
}
}
有些人可能会说用户不会使用多个手指来玩。但我被要求解决问题,开发人员也必须遵守并尊重测试人员的观点。
有人可以帮我摆脱这个问题。
提前感谢每一位:)
答案 0 :(得分:1)
不是为我们自己的视图设置独占触摸,而是为子视图或我们分配给self.view的视图打开相同的工作,在我的情况下它是......
[gameView.subviews makeObjectsPerformSelector:@selector(setExclusiveTouch:) withObject:[NSNumber numberWithBool:YES]];
希望它有所帮助,谢谢:)
答案 1 :(得分:0)
multipleTouchEnabled
的Apple文档
<强> multipleTouchEnabled 强>
同一窗口中的其他视图仍然可以在接收时触摸事件 这个属性是NO。如果您希望此视图处理多点触控 事件独占,设置此属性和值的值 exclusiveTouch属性为YES。
我在您的代码中看到,您已将setExclusiveTouch
设置为所有子视图,但setMultipleTouchEnabled
仅针对容器视图而非所有图像视图。在设置独占触摸之前/之后添加以下行,单触可能正常工作。
[self.view.subviews makeObjectsPerformSelector:@selector(setMultipleTouchEnabled:) withObject:[NSNumber numberWithBool:NO]];