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

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

Жанры

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

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

Шрифт:

/* Нужен только один палец. */

self.swipeGestureRecognizer.numberOfTouchesRequired = 1;

/* Добавляем к виду. */

[self.view addGestureRecognizer: self.swipeGestureRecognizer];

}

Распознаватель жестов может быть создан как автономный объект, но в данном случае, поскольку мы используем распознаватель только с одним видом, мы

запрограммировали его как свойство контроллера вида, который будет принимать жест (self.swipeGestureRecognizer). В подразделе «Обсуждение» данного раздела показано применение в этом коде метода handleSwipes:, выступающего в качестве цели для распознавателя жестов смахивания.

Обсуждение

Жест смахивания (скольжения) — одно из наиболее простых движений, регистрируемых встроенными распознавателями жестов, входящими в состав iOS SDK. Это простое движение одного или нескольких пальцев по экрану в том или ином направлении. Класс UISwipeGestureRecognizer, как и любые другие распознаватели жестов, наследует от класса UIGestureRecognizer и добавляет к нему различные функции. В частности, это свойства, позволяющие указывать направление, в котором должны выполняться жесты смахивания, чтобы система их обнаружила, а также определять, сколько пальцев пользователь должен держать на экране, чтобы можно было совершить жест смахивания. Не забывайте, что жесты смахивания являются дискретными.

Метод handleSwipes:, которым мы воспользовались при написании распознавателя жестов, можно реализовать следующим образом:

— (void) handleSwipes:(UISwipeGestureRecognizer *)paramSender{

if (paramSender.direction & UISwipeGestureRecognizerDirectionDown){

NSLog(@"Swiped Down.");

}

if (paramSender.direction & UISwipeGestureRecognizerDirectionLeft){

NSLog(@"Swiped Left.");

}

if (paramSender.direction & UISwipeGestureRecognizerDirectionRight){

NSLog(@"Swiped Right.");

}

if (paramSender.direction & UISwipeGestureRecognizerDirectionUp){

NSLog(@"Swiped Up.");

}

}

В свойстве direction экземпляра класса UISwipeGestureRecognizer можно скомбинировать несколько направлений, пользуясь поразрядным операндом OR (ИЛИ). В языке Objective-C он обозначается вертикальной чертой (|). Например, чтобы получить прямое диагональное смахивание по направлению к нижнему левому углу экрана, можно скомбинировать значения UISwipeGestureRecognizerDirectionLeft и UISwipeGestureRecognizerDirectionDown, применяя при создании распознавателя жестов знаки вертикальной черты. В данном примере мы пытаемся обнаружить только жесты смахивания, идущие справа налево.

Обычно смахивание выполняется только одним пальцем, но существует свойство numberOfTouchesRequired класса UISwipeGestureRecognizer, в котором можно указать количество пальцев, необходимое для того, чтобы жест был распознан.

10.2.

Обнаружение жестов вращения

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

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

Решение

Создайте экземпляр класса UIRotationGestureRecognizer и присоедините его к целевому виду:

— (void)viewDidLoad {

[super viewDidLoad];

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

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

self.helloWorldLabel.font = [UIFont systemFontOfSize:16.0f];

[self.helloWorldLabel sizeToFit];

self.helloWorldLabel.center = self.view.center;

[self.view addSubview: self.helloWorldLabel];

self.rotationGestureRecognizer = [[UIRotationGestureRecognizer alloc]

initWithTarget: self

action:@selector(handleRotations:)];

[self.view addGestureRecognizer: self.rotationGestureRecognizer];

}

Обсуждение

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

Класс UIRotationGestureRecognizer реализует свойство rotation, указывающее степень и направление вращения, заданного жестом пользователя. Эти показатели выражаются в радианах. Вращение определяется в зависимости от исходного положения пальцев (UIGestureRecognizerStateBegan) и их конечного положения (UIGestureRecognizerStateEnded).

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

Код, приведенный в подразделе «Решение» данного раздела, передает актуальный объект (в данном случае контроллер вида) к цели распознавателя жестов вращения. Целевой селектор задается как handleRotations: — метод, который мы хотим реализовать. Но прежде, чем приступить к этому, изучим заголовочный файл контроллера вида:

#import «ViewController.h»

@interface ViewController 

@property (nonatomic, strong)

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

Земля под ногами. Из истории заселения и освоения Эрец Исраэль. 1918-1948. Книга 2

Кандель Феликс Соломонович
Научно-образовательная:
история
5.00
рейтинг книги
Земля под ногами. Из истории заселения и освоения Эрец Исраэль. 1918-1948. Книга 2

Мир от Гарпа

Ирвинг Джон Уинслоу
Мировой бестселлер
Проза:
современная проза
6.25
рейтинг книги
Мир от Гарпа

Спецоперации. Лубянка и Кремль 1930–1950 годы

Судоплатов Павел Анатольевич
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Спецоперации. Лубянка и Кремль 1930–1950 годы

Офицеры и джентльмены

Во Ивлин
Проза:
современная проза
7.00
рейтинг книги
Офицеры и джентльмены

Кодекс Охотника. Книга XXII

Винокуров Юрий
22. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXII

Ученик. Книга вторая

Первухин Андрей Евгеньевич
2. Ученик
Фантастика:
фэнтези
5.40
рейтинг книги
Ученик. Книга вторая

Арлекин

Гамильтон Лорел Кей
15. Анита Блейк
Фантастика:
ужасы и мистика
9.20
рейтинг книги
Арлекин

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

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

Темная сторона луны

Карр Джон Диксон
Гидеон Фелл
Детективы:
классические детективы
5.00
рейтинг книги
Темная сторона луны

Падай, ты убит!

Пронин Виктор Алексеевич
Детективы:
прочие детективы
5.00
рейтинг книги
Падай, ты убит!

Егерь. Сердце стаи. Книга 5

Скиба Николай
5. Зверолов
Фантастика:
рпг
фэнтези
фантастика: прочее
попаданцы
6.80
рейтинг книги
Егерь. Сердце стаи. Книга 5

Сыновья

Бак Перл С.
2. Дом земли
Проза:
классическая проза
роман
5.25
рейтинг книги
Сыновья

Колдун

Григорьева Ольга
Фантастика:
фэнтези
8.56
рейтинг книги
Колдун

Возвышение Рима. Создание Великой Империи

Эверет Энтони
Научно-образовательная:
история
5.00
рейтинг книги
Возвышение Рима. Создание Великой Империи