Objective-C 2.0, iPhone, iPod, iPad, iOS
Для того чтобы понять что описывается в этой статье, вам нужно иметь представление о том как создаются приложения для iOS. Если вы еще не понимаете основ Objective-C, то сначала посмотрите тему Разработка приложений для iOS. С чего начать (Xcode 4.2).
Теория
Основой в определении событий жестов в Objective-C является класс UIResponder.
Официальную документацию об этом классе можно почитать здесь https://developer.apple.com/library/ios ... rence.html
На этой же странице документации более подробно описано то, что описано в этой статье.
Есть 2 основных вида событий: события прикосновения и события движения.
События прикосновений:
- touchesBegan:withEvent:
- touchesMoved:withEvent:
- touchesEnded:withEvent:
- touchesCancelled:withEvent:
События движений:
- motionBegan:withEvent:
- motionEnded:withEvent:
- motionCancelled:withEvent:
В этой статье я приведу пример работы с событиями движений.
- motionBegan:withEvent:
Сообщает о том, что движение началось.
Код: Выделить всё
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
Сообщает о том, что движение отменено.
Код: Выделить всё
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
Сообщает о том, что движение закончилось.
Код: Выделить всё
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
- motion
событие, указывающее вид движения. Для события встряхивания - это UIEventSubtypeMotionShake.
- event
событие, которое было вызвано движением.
Создаём приложение в Xcode 4.2
1. Создаем новый проект
Называем его, например Shake.
2. Добавляем Label
Называем его label.
Файл ViewController.h
Код: Выделить всё
#import <UIKit/UIKit.h> @interface ViewController : UIViewController { IBOutlet UILabel *label;} @end
- Выбираю файл ViewController.xib.
- В правой верхней части окна Xcode жму на кнопку Show the Assistant editor и выбираю в этом окне файл ViewController.m
- Кликаю правой кнопкой мыши по label и удерживая кнопку, перетаскиваю линию в код окна с ViewController.m. При этом связь лейбла создается автоматически.
3. Пишем код в ViewController.m
Добавляем
Код: Выделить всё
-(BOOL)canBecomeFirstResponder { return YES;}
В viewDidAppear добавляем
Код: Выделить всё
[self becomeFirstResponder];
Сообщаем об этом когда окно появится.
Код: Выделить всё
- (void)viewDidAppear:(BOOL)animated{ [self becomeFirstResponder]; [super viewDidAppear:animated];}
В viewWillDisappear добавляем
Код: Выделить всё
[self resignFirstResponder];
Когда окно будет закрыто, сообщим приложению об окончании отлова событий этим окном.
Код: Выделить всё
- (void)viewWillDisappear:(BOOL)animated{ [self resignFirstResponder]; [super viewWillDisappear:animated];}
Чтобы определить что движение началось, будем использовать motionBegan.
Код: Выделить всё
-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event { // событие произошло // проверим что это событие движения встряхивания if (event.subtype == UIEventSubtypeMotionShake) { label.text = @"Shaked!"; }}
Код: Выделить всё
if (event.subtype == UIEventSubtypeMotionShake) {
Код: Выделить всё
if (motion == UIEventSubtypeMotionShake) {
4. Теперь можно запустить приложение
Если запустить приложение в симуляторе, то можно выбрать в меню Аппаратура - Выполнить жест встряхивания.
Можно загрузить приложение и протестировать на своем устройстве. О том как это сделать без сертификата разработчика описано в статье Запуск приложения на iPhone без сертификата (Xcode 4.2).
При определении движения встряхивания, в лейбле должен появится текст Shaked!