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

на главную

Жанры

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 данного контроллера

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

Ты боишься темноты?

Шелдон Сидни
Детективы:
триллеры
8.69
рейтинг книги
Ты боишься темноты?

Побережье цифрового мира

Инин Дмитрий
2. Негодяй Аллара
Фантастика:
рпг
фэнтези
5.00
рейтинг книги
Побережье цифрового мира

Тихий Дон. Том 2

Шолохов Михаил Александрович
199. Библиотека всемирной литературы
Проза:
советская классическая проза
6.40
рейтинг книги
Тихий Дон. Том 2

Хождение за три неба

Языков Олег Викторович
Вселенная EVE Online
Фантастика:
фэнтези
6.45
рейтинг книги
Хождение за три неба

Гвардеец

Дашко Дмитрий
1. Гвардеец
Фантастика:
альтернативная история
8.62
рейтинг книги
Гвардеец

Остров любви

Нагибин Юрий Маркович
Проза:
современная проза
7.00
рейтинг книги
Остров любви

Танцующие в темноте

Ли Маурин
Любовные романы:
короткие любовные романы
8.97
рейтинг книги
Танцующие в темноте

Тайны Удольфского замка. Том 2

Рэдклиф Анна
Детективы:
триллеры
6.25
рейтинг книги
Тайны Удольфского замка. Том 2

Прозрение

Ефимов Виктор Алексеевич
Документальная литература:
публицистика
5.00
рейтинг книги
Прозрение

Сочинения

Гюго Виктор
Проза:
классическая проза
5.00
рейтинг книги
Сочинения

История Великобритании

Морган Кеннет
Национальная история
Научно-образовательная:
история
5.00
рейтинг книги
История Великобритании

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

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

Сидя в огне

Минделл Арнольд
Научно-образовательная:
психология
5.00
рейтинг книги
Сидя в огне

Сталин

Рыбас Святослав Юрьевич
1190. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
4.50
рейтинг книги
Сталин