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

на главную - закладки

Жанры

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. Обнаружение жестов долгого нажатия

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

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

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

Курсант: назад в СССР

Дамиров Рафаэль
1. Курсант
Фантастика:
попаданцы
альтернативная история
7.33
рейтинг книги
Курсант: назад в СССР

Стеллар. Заклинатель

Прокофьев Роман Юрьевич
3. Стеллар
Фантастика:
боевая фантастика
8.40
рейтинг книги
Стеллар. Заклинатель

Тихие ночи

Владимиров Денис
2. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Тихие ночи

Император Пограничья 1

Астахов Евгений Евгеньевич
1. Император Пограничья
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Император Пограничья 1

Я снова царь. Книга XXXIII

Дрейк Сириус
33. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я снова царь. Книга XXXIII

Иной. Том 3. Родственные связи

Amazerak
3. Иной в голове
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Иной. Том 3. Родственные связи

Память Света/Память огня (др. перевод)

Сандерсон Брендон
14. Колесо Времени
Фантастика:
фэнтези
7.50
рейтинг книги
Память Света/Память огня (др. перевод)

Развод в 45. От любви до ненависти

Гофман Крис
6. Развод
Любовные романы:
остросюжетные любовные романы
5.40
рейтинг книги
Развод в 45. От любви до ненависти

Рассвет русского царства 3

Грехов Тимофей
3. Новая Русь
Фантастика:
историческое фэнтези
альтернативная история
5.00
рейтинг книги
Рассвет русского царства 3

Бестужев. Служба Государевой Безопасности. Книга третья

Измайлов Сергей
3. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга третья

Убивать чтобы жить 6

Бор Жорж
6. УЧЖ
Фантастика:
боевая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 6

Князь Целитель 4

Ткачев Андрей Юрьевич
4. Князь Целитель
Фантастика:
боевая фантастика
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Князь Целитель 4

Тринадцатый IX

NikL
9. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Тринадцатый IX

Эволюционер из трущоб. Том 11

Панарин Антон
11. Эволюционер из трущоб
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Эволюционер из трущоб. Том 11