При таких значениях жест долгого нажатия будет распознан, только если пользователь нажмет экран двумя пальцами и задержит пальцы на экране в течение 1 секунды (minimumPressDuration), причем перемещать пальцы от места касания он может не более чем на 100 пикселов (allowableMovement).

Теперь, когда жест распознан, он вызовет метод handleLongPressGestures:, который можно реализовать следующим образом:

— (void) handleLongPressGestures:

(UILongPressGestureRecognizer *)paramSender{

/* Здесь мы хотим найти среднюю точку между двумя пальцами,

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

Мы сконфигурировали это число, воспользовавшись свойством

numberOfTouchesRequired класса UILongPressGestureRecognizer,

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

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

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

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 (Карты). Просматривая в этой программе разные места, нажмите пальцем определенную точку на карте и ненадолго задержите палец. В этой точке появится маркер.

<p>10.5. Обнаружение жестов-нажатий</p><p>Постановка задачи</p>

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

<p>Решение</p>

Создайте экземпляр класса 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];

}

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Похожие книги