|
Июн
03
|
Касания обрабатываются тремя методами:
- touchesBegan:
- touchesMoved:
- touchesEnded:
Чтобы получить доступ к касаниям, нужно включить в код три этих метода (или один–два). Сам код не представляет собой ничего сложного:
1 2 3 4 5 6 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { } |
Метод “touchesBegan:” будет вызываться при касании пользователем экрана одним пальцем. Каждый раз декларируется новый метод: для второго пальца, уха, носа, ноги…
Метод “touchesEnded:” будет вызываться по окончании касания.
А вот с методом “touchesMoved:” все не так просто, как может показаться на первый взгляд. Данный метод действительно вызывается при перемещении касающегося экрана пальца, но на реальном устройстве это происходит практически сразу же после “touchesBegan“. Почему? На симуляторе iPhone роль пальца играет мышь: нажимаете/отпускаете кнопку мыши (сенсорную панель) — вызываются методы “touchesBegan” и “touchesEnded“, но не “touchesMoved” (если указатель мыши не смещался). При касании экрана iPhone / iPod в 99% случаев координаты начала и конца касания не совпадают, поэтому вызывается еще и метод “touchesMoved“.
Координаты касания получить совсем несложно: достаточно к любому из трех перечисленных выше методов добавить следующий код:
1 2 | UITouch *touch = [touches anyObject]; CGPoint touchCoordinates = [touch locationInView:self.view]; |
“touchCoordinates.x” и “touchCoordinates.y” дадут всю нужную информацию.
Если интересует не только одинарное касание (например, когда касаться экрана можно несколькими пальцами), поможет представленный ниже фрагмент:
1 2 3 4 5 | NSSet *allTouches = [event allTouches]; UITouch *singleTouch; for (int i = 0; i < [allTouches count]; i++) { singleTouch = [[allTouches allObjects] objectAtIndex:i]; // здесь любой код |
Чтобы просто узнать, сколько пальцев коснулось экрана, воспользуйтесь методом “[allTouches count];” и первой строкой из примера выше.
Если двойной щелчок по экрану должен вызывать какое-то действие, обратите внимание на представленный ниже фрагмент:
1 2 | if ([touch tapCount] == 2) { // здесь любой код |
Метод “tapCount” подходит исключительно для одного касания. При многочисленных касаниях щелчки не подсчитываются.
Перейдем к более интересным темам. Как узнать, что пользователь коснулся объекта — изображения, метки…? Прежде чем в редакторе Interface Builder добавить код к атрибутам, не забудьте установить флажок “User Interaction Enabled” (а при необходимости и “Multiple Touches“). В представлениях взаимодействие с пользователем активировано по умолчанию. Того же результата можно добиться и через XCode:
1 2 | myObject.userInteractionEnabled = YES; myObject.multipleTouchEnabled = YES; |
После активации опции “User Interaction” для выполнения задач можно пользоваться оператором “if“.
1 2 3 | if ([touch view] == myObject) { // здесь любой код } |

Думаю, это все, что нужно знать о касаниях. При желании можно загрузить подготовленный мной проект. В нем есть вся информация о том:
- где начинается касание (x,y);
- где перемещается касание (x,y);
- где заканчивается касание (x,y);
- сколько пальцев коснулось экрана;
- сколько произведено щелчков;
- а также квадрат Move Me, перемещающийся вместе с пальцем.
Исходный код скачать можно [здесь]
Текст оригинальной статьи на английском языке [здесь]
Уважаемые читатели, данный материал был переведен и подготовлен к публикации проектом LookApp.ru, при публикации на другом сайте ссылка на LookApp.ru обязательна.
One Ping to “Уроки iPhone SDK: Использования возможностей сенсорного экрана - Виды касаний”
2 Responses to “Уроки iPhone SDK: Использования возможностей сенсорного экрана - Виды касаний”
-
1. ARtt Says:
Июнь 3rd, 2009 at 09:18в инете нет нигде лучшего по iphone !!!! +5 ОТЛИЧНО !! жду еще ))
-
2. NIkita Says:
Июль 8th, 2009 at 15:40Спасибо за статью!
Можно ли использовать данный метод для смены View при “пролистывании” текста вбок? (например как в приложении айЧиталка) или же для этого существует другой какой-то метод?



Июнь 5th, 2009 at 08:40
[...] Подробнее о событиях касания можно прочесть тут. [...]