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

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

Жанры

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)

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

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

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

Гром над Академией. Часть 1

Машуков Тимур
2. Гром над миром
Фантастика:
фэнтези
боевая фантастика
5.25
рейтинг книги
Гром над Академией. Часть 1

На границе империй. Том 5

INDIGO
5. Фортуна дама переменчивая
Фантастика:
боевая фантастика
попаданцы
7.50
рейтинг книги
На границе империй. Том 5

Хозяин оков VI

Матисов Павел
6. Хозяин Оков
Фантастика:
фэнтези
попаданцы
гаремник
5.00
рейтинг книги
Хозяин оков VI

Черный рынок

Вайс Александр
6. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
Черный рынок

Сирийский рубеж

Дорин Михаил
5. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сирийский рубеж

Идеальный мир для Лекаря 16

Сапфир Олег
16. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 16

Имя нам Легион. Том 1

Дорничев Дмитрий
1. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 1

Неудержимый. Книга XX

Боярский Андрей
20. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XX

Найденыш

Шмаков Алексей Семенович
2. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Найденыш

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

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

Советник 2

Шмаков Алексей Семенович
7. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Советник 2

Воплощение Похоти 3

Некрасов Игорь
3. Воплощение Похоти
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Воплощение Похоти 3

Я Гордый часть 2

Машуков Тимур
2. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый часть 2