Статьи

Быстрый совет для iOS: обнаружение касаний

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

IOS SDK предоставляет обширную библиотеку элементов управления, которые помогут вам приступить к созданию пользовательского интерфейса без необходимости работать с отдельными штрихами. Иногда эти элементы управления могут не реализовывать функции, которые вы ищете, и вам может потребоваться обрабатывать сенсорные события самостоятельно.

Используя инфраструктуру UIKit, вы можете получить доступ к сенсорным событиям в двух классах, UIView и UIViewController , оба из которых являются подклассом, UIResponder который реализует сенсорные события.

Используя четыре метода UIResponder , вы можете реализовать свой собственный код для сенсорных событий. Эти четыре метода:

  • touchesBegan:withEvent: — отправляется при касании пальцами.
  • touchesEnded:withEvent: — Отправляется, когда пальцы touchesEnded:withEvent: .
  • touchesMoved:withEvent: — отправляется, когда пальцы двигаются на сенсорном экране.
  • touchesCancelled:withEvent: — Отправляется, когда касание было прервано событием, таким как телефонный звонок.

Теперь давайте создадим простую демонстрацию этих сенсорных событий. Создайте новый проект XCode. Выберите «Просмотреть приложение», нажмите «Далее» и введите свой идентификатор компании, а «Уступки» в качестве названия проекта.

В TouchesViewController.m импортируйте Quartz Core, добавив следующую строку:

1
#import <QuartzCore/QuartzCore.h>

Нам понадобится Quartz Core, чтобы на экране появлялись круги.

Теперь в том же файле замените метод viewDidLoad следующим:

1
2
3
4
5
— (void)viewDidLoad
{
    [super viewDidLoad];
    [self.view setMultipleTouchEnabled:YES];
}

Это позволит включить мультитач в нашем представлении, поэтому сенсорное событие будет содержать несколько касаний, которые мы можем использовать.

Теперь мы можем покончить с ядром нашего приложения, используя событие touchesBegan:withEvent: Добавьте следующий метод под viewDidLoad:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    // Remove old red circles on screen
    NSArray *subviews = [self.view subviews];
    for (UIView *view in subviews) {
        [view removeFromSuperview];
    }
     
    // Enumerate over all the touches and draw a red dot on the screen where the touches were
    [touches enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {
        // Get a single touch and it’s location
        UITouch *touch = obj;
        CGPoint touchPoint = [touch locationInView:self.view];
         
        // Draw a red circle where the touch occurred
        UIView *touchView = [[UIView alloc] init];
        [touchView setBackgroundColor:[UIColor redColor]];
        touchView.frame = CGRectMake(touchPoint.x, touchPoint.y, 30, 30);
        touchView.layer.cornerRadius = 15;
        [self.view addSubview:touchView];
        [touchView release];
    }];
}

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

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

Конечный продукт

И это все, это все, что нужно для реализации пользовательской сенсорной обработки в вашем следующем проекте iOS. Спасибо за чтение, и если у вас есть какие-либо вопросы / комментарии, вы можете оставить комментарий ниже.