Чтение онлайн

на главную

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

Кроме того, прежде мы говорили о применении функции CGAffineTransformMakeRotation для создания аффинного преобразования. Функции iOS SDK, названия которых начинаются на CG, относятся к фреймворку Core Graphics. Чтобы в программах, использующих Core Graphics, успешно протекали процессы компиляции и связывания, необходимо убедиться, что Core Graphics добавлен в список фреймворков. В новых версиях Xcode стандартный проект автоматически связывается с фреймворком Core Graphics, так что об этом можно не беспокоиться.

Теперь, когда вы уверены, что фреймворк Core Graphics добавлен к целевой сборке, можно скомпилировать и запустить приложение.

См.

также

Раздел 10.6.

10.3. Обнаружение жестов панорамирования и перетаскивания

Постановка задачи

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

Жесты панорамирования — это непрерывные движения пальцев по экрану. Напоминаю, что жесты смахивания являются дискретными. Это означает, что метод, задаваемый для распознавателя жестов панорамирования в качестве целевого, вызывается многократно от начала и до конца процесса распознавания.

Решение

Воспользуйтесь классом UIPanGestureRecognizer:

— (void)viewDidLoad {

[super viewDidLoad];

/* Сначала создаем метку. */

CGRect labelFrame = CGRectMake(0.0f, /* X */

0.0f, /* Y */

150.0f, /* Ширина */

100.0f); /* Высота */

self.helloWorldLabel = [[UILabel alloc] initWithFrame: labelFrame];

self.helloWorldLabel.text = @"Hello World";

self.helloWorldLabel.backgroundColor = [UIColor blackColor];

self.helloWorldLabel.textColor = [UIColor whiteColor];

self.helloWorldLabel.textAlignment = UITextAlignmentCenter;

/* Убеждаемся, что мы активизировали пользовательские взаимодействия;

в противном случае эта метка не будет фиксировать события нажатия. */

self.helloWorldLabel.userInteractionEnabled = YES;

/* А теперь убеждаемся, что метка отображается в виде. */

[self.view addSubview: self.helloWorldLabel];

/* Создаем распознаватель жестов панорамирования. */

self.panGestureRecognizer = [[UIPanGestureRecognizer alloc]

initWithTarget: self

action:@selector(handlePanGestures:)];

/* Для активизации распознавателя жестов панорамирования требуется

один палец. */

self.panGestureRecognizer.minimumNumberOfTouches = 1;

self.panGestureRecognizer.maximumNumberOfTouches = 1;

/* Добавляем распознаватель
к виду. */

[self.helloWorldLabel addGestureRecognizer: self.panGestureRecognizer];

}

Распознаватель жестов панорамирования будет вызывать метод handlePanGestures: в качестве целевого. Этот метод описан в подразделе «Решение» данного раздела.

Обсуждение

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

• UIGestureRecognizerStateBegan;

• UIGestureRecognizerStateChanged;

• UIGestureRecognizerStateEnded.

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

9

Pan (англ.) — «панорамирование», recognizer (англ.) — «распознаватель». — Примеч. пер.

— (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. Вот почему необходимо избегать использования значений, сообщаемых именно в этом конкретном состоянии.

10.4. Обнаружение жестов долгого нажатия

Постановка задачи

Необходимо обнаруживать ситуации, в которых пользователь нажимает определенный экранный элемент и удерживает палец на экране в течение некоторого периода времени.

Поделиться:
Популярные книги

Цитаты из русской истории. От призвания варягов до наших дней. Справочник

Душенко Константин Васильевич
Справочная литература:
прочая справочная литература
6.25
рейтинг книги
Цитаты из русской истории. От призвания варягов до наших дней. Справочник

Потерянный разум

Кара-Мурза Сергей Георгиевич
Научно-образовательная:
политика
5.00
рейтинг книги
Потерянный разум

Фэнтези-2005

Пехов Алексей Юрьевич
Фантастика:
фэнтези
социально-философская фантастика
героическая фантастика
боевая фантастика
5.71
рейтинг книги
Фэнтези-2005

Наследница драконов. Тайна

Кузьмина Надежда М.
1. Наследница драконов
Фантастика:
фэнтези
юмористическое фэнтези
8.86
рейтинг книги
Наследница драконов. Тайна

Печать Иуды

Роллинс Джеймс
4. Отряд «Сигма»
Детективы:
триллеры
9.28
рейтинг книги
Печать Иуды

Закрытые воды

Денисов Вадим Владимирович
1. Путь на Кристу
Фантастика:
боевая фантастика
8.23
рейтинг книги
Закрытые воды

Стихи и песни

Визбор Юрий Иосифович
Проза:
русская классическая проза
5.00
рейтинг книги
Стихи и песни

Заводная и другие (сборник)

Бачигалупи Паоло
Коллекционная фантастика
Фантастика:
научная фантастика
5.00
рейтинг книги
Заводная и другие (сборник)

Гиперборей

Никитин Юрий Александрович
11. Трое из леса
Фантастика:
героическая фантастика
8.95
рейтинг книги
Гиперборей

Достижения в СССР. Хроники великой цивилизации

Бенуа Софья
Русская история
Научно-образовательная:
история
5.00
рейтинг книги
Достижения в СССР. Хроники великой цивилизации

Этот мир не выдержит меня. Том 2

Майнер Максим
2. Первый простолюдин в Академии
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Этот мир не выдержит меня. Том 2

Обратная сторона пути

Панкеева Оксана Петровна
11. Хроники странного королевства
Фантастика:
фэнтези
9.55
рейтинг книги
Обратная сторона пути

Первый среди равных. Книга III

Бор Жорж
3. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
6.00
рейтинг книги
Первый среди равных. Книга III

Звёздные корабли. Туманность Андромеды (ил. И. Шалито, Г. Бойко)

Ефремов Иван Антонович
Мир приключений изд. Правда
Фантастика:
научная фантастика
7.00
рейтинг книги
Звёздные корабли. Туманность Андромеды (ил. И. Шалито, Г. Бойко)