iOS. Приемы программирования
Шрифт:
Кроме того, прежде мы говорили о применении функции CGAffineTransformMakeRotation для создания аффинного преобразования. Функции iOS SDK, названия которых начинаются на CG, относятся к фреймворку Core Graphics. Чтобы в программах, использующих Core Graphics, успешно протекали процессы компиляции и связывания, необходимо убедиться, что Core Graphics добавлен в список фреймворков. В новых версиях Xcode стандартный проект автоматически связывается с фреймворком Core Graphics, так что об этом можно не беспокоиться.
Теперь, когда вы уверены, что фреймворк Core Graphics добавлен к целевой сборке, можно скомпилировать и запустить приложение.
См. также
Раздел 10.6.
10.3. Обнаружение жестов панорамирования и перетаскивания
Постановка задачи
Требуется предоставить пользователю возможность перемещать элементы в пользовательском интерфейсе, касаясь сенсорного экрана пальцами.
Жесты панорамирования — это непрерывные движения пальцев по экрану. Напоминаю, что жесты смахивания являются дискретными. Это означает, что метод, задаваемый для распознавателя жестов панорамирования в качестве целевого, вызывается многократно от начала и до конца процесса распознавания.
Решение
Воспользуйтесь классом UIPanGestureRecognizer:
Распознаватель жестов панорамирования будет вызывать метод handlePanGestures: в качестве целевого. Этот метод описан в подразделе «Решение» данного раздела.
Обсуждение
Распознаватель UIPanGestureRecognizer, как понятно из его названия [9] , способен обнаруживать жесты панорамирования. В ходе работы этот распознаватель проходит через следующие состояния:
• UIGestureRecognizerStateBegan;
• UIGestureRecognizerStateChanged;
• UIGestureRecognizerStateEnded.
Целевой метод этого распознавателя жестов можно реализовать следующим образом. Приведенный код будет непрерывно перемещать центр метки вслед за пальцем пользователя, и на протяжении этого процесса будет сообщаться о событиях GestureRecognizerStateChanged:
9
Pan (англ.) — «панорамирование», recognizer (англ.) — «распознаватель». — Примеч. пер.
Чтобы можно было перемещать метку вида, относящегося к контроллеру вида, нам нужно знать не положение метки, а положение пальца на виде. Поэтому мы вызываем метод locationInView: распознавателя жестов панорамирования и передаем родительский вид метки в качестве целевого.
Воспользуйтесь методом locationInView: распознавателя жестов панорамирования, чтобы найти позиции пальцев (или пальца), которые в настоящее время совершают этот жест. Чтобы найти положение нескольких пальцев, пользуйтесь методом locationOfTouch: inView:. С помощью свойств minimumNumberOfTouches и maximumNumberOfTouches класса UIPanGestureRecognizer можно одновременно регистрировать более одного панорамирующего касания. Но в примере ради простоты мы пытаемся найти положение всего одного пальца.
В состоянии UIGestureRecognizerStateEnded сообщаемые значения x и y могут быть и нечисловыми — они могут равняться NAN. Вот почему необходимо избегать использования значений, сообщаемых именно в этом конкретном состоянии.
10.4. Обнаружение жестов долгого нажатия
Постановка задачи
Необходимо обнаруживать ситуации, в которых пользователь нажимает определенный экранный элемент и удерживает палец на экране в течение некоторого периода времени.