|
Май
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“. Это делается перед любым из трех упомянутых методов.
Запустите приложение в симуляторе и проверьте его работу. По этому же принципу можно выводить на экран предупредительные таблицы и выполнять любые заданные пользователем действия.


Июль 15th, 2009 at 09:05
“Для вывода предупреждения внедрим объект UIAlertViewDelegate. Вот как поменяется заголовочный файл:” - Здесь видимо присутствует опечатка, так как UIAlertViewDelegate это протокол для alert. Использование этого протокола оправдано если предполагается реагировать на нажатие пользователем кнопок на UIAlertView
Июль 15th, 2009 at 14:18
Не буду отрицать что там возможно опечатка. Перевод делается с оригинального текста. Ссылка на него есть в конце урока. посмотрите оригинальный вариант, возможно решите проблему. Я не программист поэтому сам вам помочь к сожалению не могу.
Август 27th, 2009 at 12:34
Cсылка на исходники не правильная. То, на что ведет ваша ссылка - это совершенно другой урок. Правильная ссылка - http://sites.google.com/site/iphonesdktutorials/sourcecode/MultiTouchTutorialPartTwo.zip
Август 27th, 2009 at 12:51
ок спасибо. исправлю. видимо просто ошибся.