Уточнение:
Я пытаюсь добиться следующего: жесты прокрутки (вверх, вниз, вправо и влево) находятся в WebView. Когда происходит любой из жестов, это то, что должно произойти: как только начинается смахивание, должно начаться действие (действие на самом деле загружает html-ссылку, которая перемещает ip-камеру вверх, вниз, вправо, влево). Ссылка html заставляет камеру полностью двигаться вправо или влево, вверх или вниз. У меня есть еще одна html-ссылка, которая при загрузке сообщит ip-камере об остановке.
Так что это должно произойти, когда состояние UIGestureRecognizerStateBegan загружает ссылку и перемещает камеру непрерывно, пока пользователь не коснется экрана, а состояние не станет UIGestureRecognizerStateEnded и вызовет другую ссылку html для запуска в WebView, которая остановит камеру. от переезда. Пока мы говорим, мой первоначальный опубликованный код делает это, но пролистывание было слишком чувствительным. Эта проблема исправлена вашим кодом, но теперь вторая ссылка загружается сразу после первой, не позволяя камере двигаться. Имеет ли это смысл?? Первая ссылка должна работать до тех пор, пока палец не будет поднят.
Оригинальный вопрос:
Я пытался определить направление прокрутки, используя скорость в UIPanGestureRecognizer, которым я управлял, и он обнаруживает пролистывания вправо, влево, вверх и вниз, запускает соответствующие действия в зависимости от направления пролистывания и снова правильные действия, когда UIGestureRecognizerStateEnded для каждого пролистывания , НО, моя проблема в приведенном ниже коде заключается в том, что направление очень чувствительно, например, во время пролистывания вправо оно распознает большую часть пролистывания вправо, но также некоторые пролистывания вверх или вниз между ними. Поскольку смахивание не всегда идеально проходит по прямой линии, я хотел бы найти запуск действия для смахивания вправо только в том случае, если свайп БОЛЬШИНСТВЕННО вправо, и игнорировать крошечные отклонения пикселей.
Кроме того, в идеале для моего проекта нужно инициировать действие в заданном направлении смахивания только один раз, как в UISwipeGestureRecognizer, но при его использовании у меня возникла проблема с UIGestureRecognizerStateEnded, поскольку он не позволяет выполнять действие смахивания, пока я не уберу палец с экран, он сразу же завершает действие смахивания, хотя мой палец все еще проводит свайпом.
Любая помощь приветствуется. Вот мой код:
в ViewDidLoad у меня есть:
UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
[_myWebView addGestureRecognizer:gestureRecognizer];
[gestureRecognizer setMinimumNumberOfTouches:1];
[gestureRecognizer setMaximumNumberOfTouches:1];
и в моем классе у меня есть:
- (void)handleGesture:(UIPanGestureRecognizer *)gestureRecognizer
{
CGPoint velocity = [gestureRecognizer velocityInView:_myWebView];
if(velocity.x > 0)//right
{
//my action here
if ( [gestureRecognizer state] == UIGestureRecognizerStateEnded )
{ //my action when swipe finished here }
}
else if(velocity.x < 0)//left
{
//my action here
if ( [gestureRecognizer state] == UIGestureRecognizerStateEnded )
{ //my action when swipe finished here }
}
else if(velocity.y > 0)//down
{
//my action here
if ( [gestureRecognizer state] == UIGestureRecognizerStateEnded )
{ //my action when swipe finished here }
}
else if(velocity.y < 0)//up
{
//my action here
if ( [gestureRecognizer state] == UIGestureRecognizerStateEnded )
{ //my action when swipe finished here }
}
Спасибо, любые уточнения спрашивайте.