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

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

Жанры

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 из названия метода. — Примеч. пер.

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

Я еще барон. Книга III

Дрейк Сириус
3. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще барон. Книга III

Я снова не князь! Книга XVII

Дрейк Сириус
17. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я снова не князь! Книга XVII

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

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

Врубель

Коган Дора Зиновьевна
Жизнь в искусстве
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Врубель

Бастард Императора. Том 13

Орлов Андрей Юрьевич
13. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 13

Зайти и выйти

Суконкин Алексей
Проза:
военная проза
5.00
рейтинг книги
Зайти и выйти

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

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

Пустоши

Сай Ярослав
1. Медорфенов
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Пустоши

Тайна корабля

Стивенсон Роберт Льюис
Проза:
классическая проза
5.00
рейтинг книги
Тайна корабля

Наследие Маозари 8

Панежин Евгений
8. Наследие Маозари
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
постапокалипсис
рпг
фэнтези
эпическая фантастика
5.00
рейтинг книги
Наследие Маозари 8

Последний Герой. Том 4

Дамиров Рафаэль
Последний герой
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Последний Герой. Том 4

Мистики, розенкрейцеры, тамплиеры в Советской России

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

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

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

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