Уроки iPhone SDK: (Часть 1) Изучаем Multi Touch - Событие touchesEnded Уроки iPhone SDK: (Часть 3) Изучаем Multi Touch - Событие touchesMoved
Май 14

Во второй части я расскажу о работе с событием touchesBegan (обязательно прочтите [первую статью] серии и загрузите исходный код).

В файл ImgViewController.m внедряем следующий метод:

1
2
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
}

Он отвечает за вывод предупреждения в случае касания изображения в течение более чем 2 сек. Вот как будет выглядеть исходный код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

NSSet *allTouches = [event allTouches];

switch ([allTouches count]) {
case 1: { //Одно касание

//Получение первого касания.
UITouch *touch = [[allTouches allObjects] objectAtIndex:0];

switch ([touch tapCount])
{
case 1: //Одно нажатие.
{
//Запускается таймер на 2 сек.
timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self
selector:@selector(showAlertView:) userInfo:nil repeats:NO];

[timer retain];
} break;
case 2: //Двойное нажатие
break;
}
} break;
case 2: { //Двойное нажатие

} break;
default:
break;
}

}

Собираем все касания и переходим коду для случая с одним касанием. Получаем объект-касание для индекса 0 (поскольку касание — единственное, такой объект в индексе будет) и подсчитываем количество нажатий. При одном нажатии запускаем новый 2-секундный таймер и назначаем метод, вызываемый по истечении этого времени. Переменная таймера декларируется в заголовочном файле ImgViewController.h. “showAlertView” — метод, вызываемый при нажатии экрана в течение двух секунд.

Для вывода предупреждения внедрим объект UIAlertViewDelegate. Вот как поменяется заголовочный файл:

1
2
3
4
5
6
7
8
9
10
#import

@interface ImgViewController : UIViewController {

IBOutlet UIImageView *imgView;
NSTimer *timer;

}

@end

Метод “showAlertView” выглядит следующим образом:

1
2
3
4
5
6
7
8
-(void) showAlertView:(NSTimer *)theTimer {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Birth of a star" message:@"Timer ended. Event Fired."
delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
[alert release];

}

При вызове любого другого метода, включая touchesMoved, touchesEnded и touchesCanceled, таймер нужно обязательно останавливать. Для этого сначала проверяем, запущен ли таймер, потом вызываем метод “invalidate“. Это делается перед любым из трех упомянутых методов.

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

Исходный код скачать можно [здесь]

Текст оригинальной статьи на английском языке [здесь]

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

1 звезда2 звезд3 звезд4 звезд5 звезд (1 голосов, средний: 5.00 из 5)
Загрузка ... Загрузка ...


4 Responses to “Уроки iPhone SDK: (Часть 2) Изучаем Multi Touch - Событие touchesBegan”

  1. 1. K_Be Says:

    “Для вывода предупреждения внедрим объект UIAlertViewDelegate. Вот как поменяется заголовочный файл:” - Здесь видимо присутствует опечатка, так как UIAlertViewDelegate это протокол для alert. Использование этого протокола оправдано если предполагается реагировать на нажатие пользователем кнопок на UIAlertView

  2. 2. Artem Says:

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

  3. 3. Mellon Says:

    Cсылка на исходники не правильная. То, на что ведет ваша ссылка - это совершенно другой урок. Правильная ссылка - http://sites.google.com/site/iphonesdktutorials/sourcecode/MultiTouchTutorialPartTwo.zip

  4. 4. Artem Says:

    ок спасибо. исправлю. видимо просто ошибся.

Оставьте комментарий