Где я могу получить сенсорное событие с фазой UITouchPhaseStationary? - PullRequest
5 голосов
/ 28 января 2010

В этих методах я получаю соответствующие фазы:
трогает Начало: с Событие: UITouchPhaseBegan,
touchsMoved: withEvent: UITouchPhaseMoved,
прикосновенияEnded: withEvent: UITouchPhaseEnded,
Прикосновения отменены: withEvent: UITouchPhaseCancelled.

Где я могу получить событие касания с этой фазой: UITouchPhaseStationary ?

Ответы [ 3 ]

3 голосов
/ 28 января 2010

Вы можете предположить касание во времени между 2 Moved событиями как стационарное.

(UITouchPhaseStationary существует из-за мультитача. Если один палец движется, а другой нет, событие Moved все еще инициируется, но стационарное касание будет в фазе UITouchPhaseStationary.)

1 голос
/ 19 декабря 2013

Да, вы можете. но iOS не отправляет события касания стационарных пальцев. Как сказал @KennyTM, они на самом деле входят в массив allTouches объекта UIEvent всякий раз, когда происходит любой из других 4 типов каскадных событий.

const char* touchPhaseName[] = {
  "UITouchPhaseBegan",             // whenever a finger touches the surface.
  "UITouchPhaseMoved",             // whenever a finger moves on the surface.
  "UITouchPhaseStationary",        // whenever a finger is touching the surface but hasn't moved since the previous event.
  "UITouchPhaseEnded",             // whenever a finger leaves the surface.
  "UITouchPhaseCancelled"
} ;

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
  for( UITouch* touch in event.allTouches )
  {
    // event.allTouches INCLUDES the other fingers, some of which may still be stationary
    printf( "Touch id=%d is in phase %s\n", touch, touchPhaseName[touch.phase] ) ;
  }

}
0 голосов
/ 24 августа 2018

Больше информации, например, сейчас у меня 3 пальца вниз. Если один из них двигается, то -(void) touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event сработает, но в touches будет только одно касание, и только одно касание имеет фазу UITouchPhaseMoved.

Если вы хотите 3 касания перемещенных, стационарных, стационарных фаз, вам нужно проверить [event allTouches]. (Имеет тот же тип (NSSet<UITouch *> *), что и touches). touches содержит только касание, которое запускает обратный вызов, и, таким образом, вы никогда не получите стационарную фазу из touches, потому что такого обратного вызова для стационарного (неподвижного) входа нет .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...