Обсуждение

We use cookies. Read the Privacy and Cookie Policy

Обсуждение

Распознаватель UIPanGestureRecognizer, как понятно из его названия[9], способен обнаруживать жесты панорамирования. В ходе работы этот распознаватель проходит через следующие состояния:

• UIGestureRecognizerStateBegan;

• UIGestureRecognizerStateChanged;

• UIGestureRecognizerStateEnded.

Целевой метод этого распознавателя жестов можно реализовать следующим образом. Приведенный код будет непрерывно перемещать центр метки вслед за пальцем пользователя, и на протяжении этого процесса будет сообщаться о событиях GestureRecognizerStateChanged:

— (void) handlePanGestures:(UIPanGestureRecognizer*)paramSender{

if (paramSender.state!= UIGestureRecognizerStateEnded &&

paramSender.state!= UIGestureRecognizerStateFailed){

CGPoint location = [paramSender

locationInView: paramSender.view.superview];

paramSender.view.center = location;

}

}

Чтобы можно было перемещать метку вида, относящегося к контроллеру вида, нам нужно знать не положение метки, а положение пальца на виде. Поэтому мы вызываем метод locationInView: распознавателя жестов панорамирования и передаем родительский вид метки в качестве целевого.

Воспользуйтесь методом locationInView: распознавателя жестов панорамирования, чтобы найти позиции пальцев (или пальца), которые в настоящее время совершают этот жест. Чтобы найти положение нескольких пальцев, пользуйтесь методом locationOfTouch: inView:. С помощью свойств minimumNumberOfTouches и maximumNumberOfTouches класса UIPanGestureRecognizer можно одновременно регистрировать более одного панорамирующего касания. Но в примере ради простоты мы пытаемся найти положение всего одного пальца.

В состоянии UIGestureRecognizerStateEnded сообщаемые значения x и y могут быть и нечисловыми — они могут равняться NAN. Вот почему необходимо избегать использования значений, сообщаемых именно в этом конкретном состоянии.

Данный текст является ознакомительным фрагментом.