3. Обработка событий
UIResponder — абстрактный класс (родитель UIViewController , UIView,
UIApplication), содержащий методы обработки событий (от клавиатуры, касаний,
акселерометра, кнопок гарнитуры).
UIResponder
4. Обработка событий
UIResponder — абстрактный класс (родитель UIViewController , UIView,
UIApplication), содержащий методы обработки событий (от клавиатуры, касаний,
акселерометра, кнопок гарнитуры).
Знакомый пример использования UIResponder — показ и скрытие клавиатуры:
// Показать клавиатуру
[self.textField becomeFirstResponder];
// Скрыть клавиатуру
[self.textField resignFirstResponder];
UIResponder
5. Обработка событий
UIEvent — общий класс для описания следующих типов событий:
● Touch events (касания)
● Motion events (акселерометр, гироскоп, тряска)
● Remote-control events (кнопки гарнитуры: пауза, перемотка, ...)
События UIEvent приходят в объекты-респондеры (наследники класса UIResponder):
UIViewController , UIView, UIApplication, UIWindow и их наследники.
UIEvent
6. Обработка событий
UIEvent — общий класс для описания следующих типов событий:
● Touch events (касания)
● Motion events (акселерометр, гироскоп, тряска)
● Remote-control events (кнопки гарнитуры: пауза, перемотка, ...)
События UIEvent приходят в объекты-респондеры (наследники класса UIResponder):
UIViewController , UIView, UIApplication, UIWindow и их наследники.
UIEvent
7. Обработка событий
UITouch — класс, представляющий касание.
● Каждый UITouch соответствует одному касанию (пальцу).
● Объект UITouch живёт на протяжении всего жеста, при этом меняются его координаты и timestamp.
● У UITouch можно спросить нынешние и предыдущие координаты относительно любого view или window.
● UITouch хранит информацию о view, на которой начался жест и о количестве тапов в начале жеста.
● Чтобы view отвечала на касания, нужно выставить свойство
userInteractionEnabled = YES.
● Один UIEvent типа UIEventTypeTouches содержит множество объектов UITouch.
UITouch
8. Обработка событий
Для обработки касаний в view или ViewController нужно реализовать следующие методы (из
протокола UIResponder):
– (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
Вызывается один раз при старте жеста.
– (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
Вызывается постоянно во время движения пальца.
– (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
Вызывается один раз при окончании жеста.
– (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
Вызывается при отмене жеста (например если телефон поднесли к уху).
UITouch
10. Обработка событий
UIGestureRecognizer — абстрактный класс, предоставляющий интерфейс для работы с
жестами на более высоком уровне абстракции по сравнению с касаниями. Может оперировать
такими понятиями как скорость перемещения, направление свайпа, уровень зума, угол
поворота, длительность нажатия.
Конкретные реализации включают:
● UITapGestureRecognizer
● UIPinchGestureRecognizer
● UIRotationGestureRecognizer
● UISwipeGestureRecognizer
● UIPanGestureRecognizer
● UIScreenEdgePanGestureRecognizer
● UILongPressGestureRecognizer
UIGestureRecognizer
11. Обработка событий
UIGestureRecognizer — абстрактный класс, предоставляющий интерфейс для работы с
жестами на более высоком уровне абстракции по сравнению с касаниями. Может оперировать
такими понятиями как скорость перемещения, направление свайпа, уровень зума, угол
поворота, длительность нажатия.
Конкретные реализации включают:
● UITapGestureRecognizer
● UIPinchGestureRecognizer
● UIRotationGestureRecognizer
● UISwipeGestureRecognizer
● UIPanGestureRecognizer
● UIScreenEdgePanGestureRecognizer
● UILongPressGestureRecognizer
UIGestureRecognizer
12. Обработка событий
UIGestureRecognizer
● Объект конкретного класса UIGestureRecognizer добавляется на UIView и
отслеживает события на этой view.
● Рекогнайзеру задаётся пара target/action, в которую передаётся управление после
совершения пользователем соответствующего жеста.
● Рекогнайзер может иметь делегата, ответственного за разрешение конфликтов между
несколькими рекогнайзерами на одной view.
14. Обработка событий
UIEvent — общий класс для описания следующих типов событий:
● Touch events (касания)
● Motion events (акселерометр, гироскоп, тряска)
● Remote-control events (кнопки гарнитуры: пауза, перемотка, ...)
События UIEvent приходят в объекты-респондеры (наследники класса UIResponder):
UIViewController , UIView, UIApplication, UIWindow и их наследники.
UIEvent
15. Обработка событий
UIViewController является наследником UIResponder и может получать события:
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (motion == UIEventSubtypeMotionShake) {
// Реакция на тряску
//...
}
}
- (BOOL)canBecomeFirstResponder
{
return YES;
}
- (void)viewDidLoad
{
//...
[self becomeFirstResponder];
}
UIEvent
17. Обработка событий
Локальные нотификации позволяют показывать всплывающее
сообщение в заранее определённое время, не полагаясь на то, что
приложение будет в этот момент запущено. Пользователю будет
предложено проигнорировать сообщение или запустить наше
приложение.
UILocalNotification
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = [[NSDate date] dateByAddingTimeInterval:60.0f];
notification.alertAction = @"Show...";
notification.alertBody = @"Some text message for user...";
notification.soundName = UILocalNotificationDefaultSoundName;
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
18. Обработка событий
UILocalNotification
В AppDelegate мы получаем нотификации:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UILocalNotification *ln =
launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
if (ln != nil) {
// App was launched from a notification
//...
}
//...
return NO;
}
- (void)application:(UIApplication*)application
didReceiveLocalNotification:(UILocalNotification*)n
{
// Application received a notification
//...
}