Отслеживание жеста «встряхивание» (Shake, iOS, Xcode 4.2)
Добавлено: 08 мар 2012, 18:40
Отслеживание жеста «встряхивание» (Shake Gestures, iOS, Xcode 4.2)
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:
Сообщает о том, что движение началось.
– motionCancelled:withEvent:
Сообщает о том, что движение отменено.
– motionEnded:withEvent:
Сообщает о том, что движение закончилось.
Всем трем методам доступны следующие переменные:
- motion
событие, указывающее вид движения. Для события встряхивания - это UIEventSubtypeMotionShake.
- event
событие, которое было вызвано движением.
Создаём приложение в Xcode 4.2
1. Создаем новый проект
Называем его, например Shake.
2. Добавляем Label
Называем его label.
Файл ViewController.h
Я делаю это так:
- Выбираю файл ViewController.xib.
- В правой верхней части окна Xcode жму на кнопку Show the Assistant editor и выбираю в этом окне файл ViewController.m
- Кликаю правой кнопкой мыши по label и удерживая кнопку, перетаскиваю линию в код окна с ViewController.m. При этом связь лейбла создается автоматически.
3. Пишем код в ViewController.m
Добавляем
canBecomeFirstResponder - указывает может ли текущее окно первым реагировать на события. По умолчанию NO.
В viewDidAppear добавляем
becomeFirstResponder - сообщает о том что текущее окно будет первым реагировать на события.
Сообщаем об этом когда окно появится.
В viewWillDisappear добавляем
resignFirstResponder - сообщает о том, что текущему окну не надо первым реагировать на события.
Когда окно будет закрыто, сообщим приложению об окончании отлова событий этим окном.
Чтобы определить что движение началось, будем использовать motionBegan.
Мы можем узнать подтип события из самого события, как в коде выше
или использовать только motion
Почитать про UIEvent и UIEventSubtype можно в документации https://developer.apple.com/library/ios ... rence.html
4. Теперь можно запустить приложение
Если запустить приложение в симуляторе, то можно выбрать в меню Аппаратура - Выполнить жест встряхивания.
Можно загрузить приложение и протестировать на своем устройстве. О том как это сделать без сертификата разработчика описано в статье Запуск приложения на iPhone без сертификата (Xcode 4.2).
При определении движения встряхивания, в лейбле должен появится текст Shaked!
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!