как отключить touchBegan: для мультитач?

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

В настоящее время я получаю 1 объект в

touches 

когда я нажимаю двумя пальцами одновременно (удерживая клавишу выбора и нажимая на симулятор). Я считаю, что это потому, что я не включил

multipleTouchEnabled 

свойство прикрепленного представления. Хочу сделать так, чтобы это событие не регистрировалось на мультитач.

Изучая проблему, кажется, что она сработает, если я включу multipleTouchEnabled, а затем сделаю

if ([touches count] > 1) {
    return;
}

in my

touchesBegan:

Однако мне это кажется странным, поскольку я ВКЛЮЧАЮ multipleTouchEnabled, чтобы ОТКЛЮЧИТЬ несколько касаний, и меня беспокоит, будут ли побочные эффекты. Есть ли лучший способ решить мою проблему?


person Popcorn    schedule 11.02.2013    source источник
comment
Имейте в виду: на реальном устройстве маловероятно, что пальцы пользователя будут касаться экрана в одно и то же время. Вы должны быть готовы к тому, что -touchesBegan: будет вызван дважды (или более) с разными прикосновениями.   -  person Kurt Revis    schedule 12.02.2013


Ответы (5)


Вы должны просто иметь возможность отключить свойство мультитач в представлении, в IB вам нужно фактически перейти на боковую панель и щелкнуть то, что говорит вид рядом с владельцем файлов, чтобы получить его, а затем снимите флажок, или вы могли бы сделать это в коде в viewdidload:

self.view.multiTouchEnabled = НЕТ;

person Suhaiyl    schedule 19.02.2013

Сначала добавьте в представление распознаватель жестов:

UITapGestureRecognizer *multipleTouches = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleMultiTap:)];
multipleTouches.numberOfTouchesRequired = 2;
[yourViewName addGestureRecognizer:multipleTouches];
[multipleTouches release];

Надеюсь, это поможет тебе.

person Community    schedule 18.02.2013

Вы можете использовать распознаватель жестов, это, вероятно, более читабельно, чем делегат касаний, даже если ваш код работает:

UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(myAction:)];
gestureRecognizer.numberOfTouchesRequired = 2;
person Andrew Johnson    schedule 11.02.2013

Если использование NSTouches обязательно, вы можете использовать следующие методы для достижения желаемой задачи.

[view setMultipleTouchEnabled:NO];
[view setExclusiveTouch:YES];

Более того, вы можете играть с

setMultipleTouchEnabled:

сохраняя

view setExclusiveTouch на YES

person yunas    schedule 15.02.2013

Вы можете использовать эту строку, чтобы избежать множественных касаний в точке, установите эксклюзивное касание «Да» для вашего представления.

[self.view setExclusiveTouch:YES];
person Vinay Hosamane    schedule 24.08.2016