прикосновения закруглились не вызывая ??? или случайно называется - PullRequest
8 голосов
/ 28 апреля 2010

Если я подниму палец вверх от первого прикосновения, то он распознает следующее касание просто отлично. Это только когда я постоянно удерживаю свое первое касание, а затем пытаюсь коснуться другой области другим пальцем одновременно. Затем он будет неправильно зарегистрировать это второе касание как снова с первого касания.

Обновление Это как-то связано с касаниями. Закругление не вызывается до тех пор, пока не закончится последнее ПОСЛЕДНЕЕ касание (не имеет значения, если у вас уже было 5 других касаний, прежде чем вы наконец отпустили последнее ... он призывает их всех закончить, когда закончится последнее касание)

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

 UITouch* touch = [touches anyObject];

 NSString* filename = [listOfStuff objectAtIndex:[touch view].tag];

// do something with the filename now

}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {

 ITouch* touch = [touches anyObject];
 NSString* buttonPressed = [listOfStuff objectAtIndex:[touch view].tag];

 // do something with this info now
}

Ответы [ 7 ]

9 голосов
/ 13 июля 2012

У меня было это сегодня (или, точнее, у меня была эта проблема, свалившаяся на меня сегодня!).

То, что я видел, происходит:

  • Сенсорный экран с пальцем 1
  • дотрагивается до пожара
  • Сенсорный экран с пальцем 2
  • дотрагивается до пожара
  • Отпустите палец 2
  • ничего не происходит
  • Отпустите палец 1
  • трогает закругленные огни
  • прикосновенияКруглые огни

Как сказал Гэвин Клифтон, это произойдет, только если вы добавите распознаватель жестов. Без добавленного распознавателя, прикосновения закругляются после каждого нажатия пальца. Что было бы здорово, если бы мне не нужно было использовать распознаватели ... !!!

Я решил это, добавив gestRotation.delaysTouchesEnded = FALSE; в мой код создания / добавления распознавателя:

gestureRotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(gestureRotation_Callback:)];

[gestureRotation setDelegate:self];
gestureRotation.cancelsTouchesInView = FALSE;
gestureRotation.delaysTouchesEnded = FALSE;        // <---- this line!!
[self.view addGestureRecognizer: gestureRotation];
[gestureRotation release];

Теперь жесты работают, а касания стали больше не в очередях!

7 голосов
/ 04 мая 2010

По какой-то причине touchShended задерживается только тогда, когда касание находится внутри прокрутки. Если вы либо: а) отключите прокрутку от прокрутки; или б) не используйте скроллвью, тогда touchesEnded доставляется сразу.

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

Есть еще мысли? Кто-нибудь когда-либо делил UIWindow на подклассы, чтобы попытаться перехватить касания таким образом? Любой вклад, который вы могли бы предоставить, приветствуется.

6 голосов
/ 10 октября 2011

У прокрутки есть свойство delaysContentTouches, которое по умолчанию установлено на YES. Он будет задерживать все события касания, пока не определит жест прокрутки.

4 голосов
/ 21 июня 2012

Я знаю, что этот вопрос немного устарел, но я подумал, что поделюсь своим опытом для тех, кто наткнулся на эту тему в поисках ответа, как у меня только что.

Я боролся с этой проблемой в течение нескольких часов, и единственное решение, которое я мог найти, - это удалить любые UIGestureRecognizer объекты, которые я использовал.

Для своей настройки я использовал распознаватели панорамирования и касания для захвата этих жестов, а также использовал touchesBegan и touchesEnded для любых стандартных событий касания. Только когда я удалил объекты UIGestureRecognizer, метод touchesEnded начал вызываться снова для окончания второго касания. Именно это и было причиной распознавания панорамирования.

Я не совсем уверен, применимо ли это в этом случае, но это решило проблемы, которые у меня были.

0 голосов
/ 12 февраля 2018

Я нашел другой вариант.

После того, как touchesBegan и CGPoint не перемещены в соответствии с touchesMoved, touchesCancelled вызвано.

Однако, если CGPoint изменилось в соответствии с touchesMoved, touchesEnded вызвано.

0 голосов
/ 25 июля 2015

У меня только что была эта проблема, когда touchesEnded никогда не вызывался бы для кнопки в ScrollView. Основываясь на ответе Овидиу, я обнаружил, что ручная установка ContentOffset моего ScrollView вызывала проблему. Предположительно, установка contentOffset так, как у меня, приводила в замешательство ScrollView, пытаясь ли нажать кнопку или прокрутить представление.

Разрешение смещения на 0,0 устраняет проблему.

0 голосов
/ 28 апреля 2010

Набор multipleTouchEnabled.

В Интерфейсном Разработчике это флажок «Multiple Touch» под «Взаимодействие с пользователем включено».

...