#ios #cocoa-touch #uitouch #touchescancelled
#iOS #cocoa-touch #uitouch #касание отменено
Вопрос:
У меня есть два представления, одно под другим. Я поворачиваю вид ниже, используя сенсорное управление видом сверху. при попытке выполнить свайп событие отмены касаний вызывается перед событием завершения касаний. При перемещении пальца вызываются события «касания начались» и «касания перемещены», а затем событие «касания завершены» вызывается последним (в основном). Но иногда при попытке двигаться медленно событие отмены касаний вызывается остановкой событий касания. Поэтому я не мог поворачивать просмотр на низкой скорости. В чем может быть проблема? как избежать события отмены касаний?
Примечание: Я рисую некоторые графики в представлениях, используя библиотеку core-plot.
Ответ №1:
Если вы используете какие-либо UIGestureRecognizers
приложения, они автоматически отменяют касания к другим представлениям, когда распознают их жест. Вы можете отключить это поведение с помощью cancelsTouchesInView
свойства распознавателя.
Ответ №2:
Если вы не используете UIGestureReconizer напрямую, имейте в виду свойство gestureRecognizers пользовательского интерфейса. У меня такая же проблема, и с помощью этого кода я ее решаю:
if (event.type == UIEventTypeTouches)
{
NSSet* tmpTouches = [event touchesForView:m_PhotoView];
if ([tmpTouches count] == 2)
{
UITouch *tmpTouch1 = [[tmpTouches allObjects] objectAtIndex:0];
UITouch *tmpTouch2 = [[tmpTouches allObjects] objectAtIndex:1];
if ((tmpTouch1 != nil)amp;amp;(tmpTouch2 != nil))
{
UIGestureRecognizer * tmpG;
if ([tmpTouch1.gestureRecognizers count] > 0)
{
tmpG = [tmpTouch1.gestureRecognizers objectAtIndex:0];
tmpG.cancelsTouchesInView = NO;
}
if ([tmpTouch2.gestureRecognizers count] > 0)
{
tmpG = [tmpTouch2.gestureRecognizers objectAtIndex:0];
tmpG.cancelsTouchesInView = NO;
}
// Code ...
}
}
}
Комментарии:
1. Это было идеально для того, что мне было нужно, поскольку я не использовал gestureRecognizers, и это отключило все события отмены от разрушения моих плавных движений. Спасибо pocjoc.
2. Я не использую жесты, но я не понимаю значения того, что tmpTouches считаются равными 2 и жестко кодируют значения индексов. Не могли бы вы, пожалуйста, объяснить немного больше об этом?
Ответ №3:
Также обратите внимание на UISwipeGestureRecognizer. Это вызывало проблему для меня и решается, как только мы устанавливаем
[recognizer setCancelsTouchesInView:FALSE];
Ответ №4:
Если задействован вид прокрутки, снимите флажок с его свойства content касание может отменяться при прокрутке в storybord.