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