Читаем iOS. Приемы программирования полностью

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


}

Обсуждение

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже