【发布时间】:2014-01-22 05:59:23
【问题描述】:
我知道有很多关于多指触摸和限制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];
}
}
即使这样似乎也行不通。
EDIT-设置最大和最小触摸次数:
我还将平移手势的最大和最小触摸次数也设置为 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];
}
}
}
}
有些人可能会说不可能有用户使用多个手指来玩的情况。但我被要求解决这个问题,开发人员也必须服从并尊重测试人员的观点。
谁能帮我解决这个问题。
提前谢谢大家:)
【问题讨论】:
-
您是否也将手势识别器的 minimumNumberOfTouches 和 maximumNumberOfTouches 设置为 1?
-
是的也试过了@lukya
标签: iphone uiview multi-touch