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

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

Жанры

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

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

Шрифт:

Решение

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

#import «ViewController.h»

@interface ViewController 

@property (nonatomic, strong)

UILongPressGestureRecognizer *longPressGestureRecognizer;

@property (nonatomic, strong) UIButton *dummyButton;

@end

@implementation ViewController

Далее приведен метод экземпляра viewDidLoad, относящийся к контроллеру вида, где используется распознаватель долгих нажатий. Этот распознаватель реализован в следующем. m-файле:

— (void)viewDidLoad {

[super viewDidLoad];

self.dummyButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];

self.dummyButton.frame = CGRectMake(0.0f,

0.0f,

72.0f,

37.0f);

self.dummyButton.center = self.view.center;

[self.view addSubview: self.dummyButton];

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

self.longPressGestureRecognizer =

[[UILongPressGestureRecognizer alloc]

initWithTarget: self

action:@selector(handleLongPressGestures:)];

/* Количество пальцев, которые должны находиться на экране. */

self.longPressGestureRecognizer.numberOfTouchesRequired = 2;

/* Допускается движение не более чем на 100 точек,

прежде чем жест будет распознан. */

self.longPressGestureRecognizer.allowableMovement = 100.0f;

/* Пользователь должен прижать к экрану два пальца

(numberOfTouchesRequired) как минимум на секунду, чтобы жест

был распознан. */

self.longPressGestureRecognizer.minimumPressDuration = 1.0;

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

[self.view addGestureRecognizer: self.longPressGestureRecognizer];

}

Если распознаватель долгих нажатий инициирует события, отправляемые объекту-получателю, а пользователь продолжает совершать такой жест и в этой ситуации поступает входящий звонок либо наступает какое-то иное прерывание, то распознаватель жестов перейдет в состояние UIGestureRecognizerStateCancelled. Объекту-получателю не будет поступать никакой информации от распознавателя жестов до тех пор, пока пользователь снова не совершит всю последовательность действий, требуемых, чтобы возобновился процесс распознавания. В данном примере распознавание возобновится после удержания хотя бы двух пальцев на виде в контроллере вида, и нажатие должно длиться не менее 1 секунды.

Код работает в контроллере вида со свойством longPressGestureRecognizer типа UILongPressGestureRecognizer. Этот аспект подробнее рассмотрен в подразделе «Решение» данного раздела.

Обсуждение

В составе iOS SDK есть класс для распознавания долгих нажатий, который называется UILongTapGestureRecognizer. Жест долгого нажатия инициируется, когда пользователь нажимает одним или несколькими пальцами (количество пальцев в данном случае задает программист) вид UIView и удерживает палец (или пальцы) в этой точке на протяжении определенного количества секунд. Учитывайте, что долгие нажатия — это непрерывные события.

На работу распознавателя жестов долгих нажатий влияют четыре важных свойства:

• numberOfTapsRequired — это количество нажатий целевого вида, которые пользователь должен совершить, прежде чем может быть инициирован жест долгого нажатия. Не забывайте, что нажать — это не просто прикоснуться пальцем к экрану. Нажатие — это движение, при котором палец сначала прижимается к экрану, а потом отрывается от него. По умолчанию это свойство имеет значение 0;

• numberOfTouchesRequired — в этом свойстве указывается количество пальцев, которые должны оказаться на экране, прежде чем начнется распознавание жеста. Если свойство numberOfTapsRequired имеет значение больше 0, то для обнаружения нажатий нужно указать аналогичное количество пальцев;

• allowableMovement — это максимальное количество пикселов, на которое можно продвинуть палец на экране, прежде чем распознавание жеста будет прекращено;

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

В нашем примере для перечисленных свойств заданы следующие значения:

• numberOfTapsRequired — Default (это значение мы не меняем);

• numberOfTouchesRequired — 2;

• allowableMovement — 100;

• minimumPressDuration — 1.

При таких значениях жест долгого нажатия будет распознан, только если пользователь нажмет экран двумя пальцами и задержит пальцы на экране в течение 1 секунды (minimumPressDuration), причем перемещать пальцы от места касания он может не более чем на 100 пикселов (allowableMovement).

Теперь, когда жест распознан, он вызовет метод handleLongPressGestures:, который можно реализовать следующим образом:

— (void) handleLongPressGestures:

(UILongPressGestureRecognizer *)paramSender{

/* Здесь мы хотим найти среднюю точку между двумя пальцами,

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

Мы сконфигурировали это число, воспользовавшись свойством

numberOfTouchesRequired класса UILongPressGestureRecognizer,

инстанцированного в методе экземпляра viewDidLoad данного контроллера

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

Воронцов. Перезагрузка. Книга 5

Тарасов Ник
5. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 5

Газлайтер. Том 10

Володин Григорий
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Газлайтер. Том 10

Ратник

Ланцов Михаил Алексеевич
3. Помещик
Фантастика:
альтернативная история
7.11
рейтинг книги
Ратник

За Горизонтом

Вайс Александр
8. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
За Горизонтом

Кодекс Крови. Книга ХIII

Борзых М.
13. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХIII

Законы Рода. Том 4

Мельник Андрей
4. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 4

Третий. Том 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
фантастика: прочее
попаданцы
5.00
рейтинг книги
Третий. Том 6

Неучтенный элемент. Том 5

NikL
5. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 5

Академия

Щепетнов Евгений Владимирович
3. Петр Синельников
Фантастика:
фэнтези
6.20
рейтинг книги
Академия

Украсть у президента

Гриньков Владимир Васильевич
Детективы:
триллеры
5.00
рейтинг книги
Украсть у президента

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин

Киберпространство

Ливадный Андрей Львович
43. Экспансия: История Галактики
Фантастика:
космическая фантастика
7.69
рейтинг книги
Киберпространство

Неучтенный элемент. Том 10

NikL
10. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 10

Лекарь Империи 7

Карелин Сергей Витальевич
7. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
попаданцы
5.00
рейтинг книги
Лекарь Империи 7