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

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

Жанры

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

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

Шрифт:

вида. Если выяснится, что другой распознаватель долгих нажатий

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

if (paramSender.numberOfTouchesRequired == 2){

CGPoint touchPoint1 =

[paramSender locationOfTouch:0

inView: paramSender.view];

CGPoint touchPoint2 =

[paramSender locationOfTouch:1

inView: paramSender.view];

CGFloat midPointX = (touchPoint1.x + touchPoint2.x) / 2.0f;

CGFloat midPointY = (touchPoint1.y + touchPoint2.y) / 2.0f;

CGPoint midPoint = CGPointMake(midPointX, midPointY);

self.dummyButton.center = midPoint;

} else {

/* Это распознаватель долгих нажатий, которые совершаются

более или менее чем двумя пальцами. */

}

}

}

В качестве примера программы для iOS, в которой используются долгие нажатия, можно назвать приложение Maps (Карты). Просматривая в этой программе разные места, нажмите пальцем определенную точку на карте и ненадолго задержите палец. В этой точке появится маркер.

10.5. Обнаружение жестов-нажатий

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

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

Решение

Создайте экземпляр класса UITapGestureRecognizer и добавьте его к целевому виду с помощью метода экземпляра addGestureRecognizer:, относящегося к классу UIView. Рассмотрим определение контроллера вида (.h-файл):

#import «ViewController.h»

@interface ViewController 

@property (nonatomic, strong)

UITapGestureRecognizer *tapGestureRecognizer;

@end

@implementation ViewController

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

— (void)viewDidLoad {

[super viewDidLoad];

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

self.tapGestureRecognizer = [[UITapGestureRecognizer alloc]

initWithTarget: self

action:@selector(handleTaps:)];

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

self.tapGestureRecognizer.numberOfTouchesRequired = 2;

/* Общее количество касаний, которое должно быть выполнено, прежде

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

self.tapGestureRecognizer.numberOfTapsRequired = 3;

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

[self.view addGestureRecognizer: self.tapGestureRecognizer];

}

Обсуждение

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

Метод locationInView: класса UITapGestureRecognizer можно применять для обнаружения точки, в которой произошло событие нажатия. Если для регистрации нажатия требуется более одного касания, то можно вызвать метод locationOfTouch: inView: класса UITapGestureRecognizer, определяющий точки отдельных касаний. В коде мы задали для свойства numberOfTouchesRequired распознавателя жестов-нажатий значение 2. При таком значении распознавателю жестов необходимо, чтобы в момент каждого нажатия на экране находились два пальца. Количество нажатий, требуемое, чтобы жесты-нажатия стали распознаваться, определено как 3. Я сделал это с помощью свойства numberOfTapsRequired. Я указал метод handleTaps: в качестве целевого метода распознавателя жестов-нажатий:

— (void) handleTaps:(UITapGestureRecognizer*)paramSender{

NSUInteger touchCounter = 0;

for (touchCounter = 0;

touchCounter < paramSender.numberOfTouchesRequired;

touchCounter++){

CGPoint touchPoint =

[paramSender locationOfTouch: touchCounter

inView: paramSender.view];

NSLog(@"Touch #%lu: %@",

(unsigned long)touchCounter+1,

NSStringFromCGPoint(touchPoint));

}

}

В этом коде мы дожидаемся, пока произойдет такое количество нажатий, которое требуется, чтобы распознаватель жестов-нажатий начал работу. Беря за основу это количество, мы узнаем точку, в которой было сделано каждое нажатие. В зависимости от того, работаете ли вы с реальным устройством или с симулятором, в окне консоли будут выведены примерно такие результаты:

Touch #1: {107, 186}

Touch #2: {213, 254}

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

Кроме того, необходимо упомянуть о методе NSStringFromCGPoint, который, как понятно из его названия [10] , может преобразовать структуру CGPoint в строку NSString. Эта функция применяется для превращения CGPoint каждого прикосновения к экрану в NSString, а данную строку мы уже можем записать в окне консоли, воспользовавшись NSLog. Чтобы открыть окно консоли, выполните Run — Console (Запустить— Консоль).

10

На преобразование указывает компонент from из названия метода. — Примеч. пер.

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

Последний Паладин. Том 7

Саваровский Роман
7. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 7

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

Мастер 8

Чащин Валерий
8. Мастер
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Мастер 8

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

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

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

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

Винокуров Юрий
26. Кодекс Охотника
Фантастика:
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXVI

Чужак из ниоткуда

Евтушенко Алексей Анатольевич
1. Чужак из ниоткуда
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужак из ниоткуда

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

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

Московское золото и нежная попа комсомолки. Часть Пятая

Хренов Алексей
5. Летчик Леха
Фантастика:
попаданцы
5.00
рейтинг книги
Московское золото и нежная попа комсомолки. Часть Пятая

Барону наплевать на правила

Ренгач Евгений
7. Закон сильного
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Барону наплевать на правила

Уникум

Поселягин Владимир Геннадьевич
1. Уникум
Фантастика:
альтернативная история
4.60
рейтинг книги
Уникум

Второгодка. Книга 2. Око за око

Ромов Дмитрий
2. Второгодка
Фантастика:
героическая фантастика
альтернативная история
фэнтези
5.00
рейтинг книги
Второгодка. Книга 2. Око за око

По осколкам твоего сердца

Джейн Анна
2. Хулиган и новенькая
Любовные романы:
современные любовные романы
5.56
рейтинг книги
По осколкам твоего сердца

Хозяин Стужи 3

Петров Максим Николаевич
3. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
7.00
рейтинг книги
Хозяин Стужи 3