Swift: Как вы получаете скорость для каждого касания с UIPanGestureRecognizer? - PullRequest
0 голосов
/ 27 марта 2020

Я хотел бы получить скорость для каждого касания, используя UIPanGestureRecognizer, как то, что вы можете сделать с расположением касаний, используя метод location(ofTouch: Int, in: UIView). Однако, когда я использую метод velocity(in: view), он возвращает только одну из скоростей касаний. Я попытался изменить свойство maximumNumberOfTouches, но оно не сработало.

Можно ли как-нибудь этого добиться?

1 Ответ

0 голосов
/ 28 марта 2020

Хорошо, поэтому я решил эту проблему, создав 2d массив CGPoint с именем touchLocations и другой массив CGPoint с именем touchVelocities. В цикле l oop для всех касаний я добавил

if !touchLocations.indices.contains(touchNumber) {
    touchLocations.append([CGPoint]())
}
touchLocations[touchNumber].append(sender.location(ofTouch: touchNumber, in: view))

, чтобы назначить новый CGPoint для каждого касания (touchNumber - индекс касания, а sender - это распознаватель жестов).

Затем я добавил

touchLocations[touchNumber] = touchLocations[touchNumber].suffix(2)

, чтобы массив содержал только последние 2 элемента.

Чтобы получить скорость, я просто сделал

touchVelocities.insert(CGPoint(x: touchLocations[touchNumber].last!.x - touchLocations[touchNumber].first!.x, y: touchLocations[touchNumber].last!.y - touchLocations[touchNumber].first!.y), at: touchNumber)

(вычитал первое значение x из второго значения x для скорости x и делал то же самое для скорости y)

Я знаю, что этот метод не очень точен, однако он был достаточно для моих целей.

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