SlideShare a Scribd company logo
1 of 18
Download to read offline
iOS Internship 2014
Обработка событий
UIResponder, UIEvent
UITouch
UIGestureRecognizer
акселерометр, гироскоп
локальные нотификации
лекция 11
Обработка событий
Обработка событий
UIResponder — абстрактный класс (родитель UIViewController , UIView,
UIApplication), содержащий методы обработки событий (от клавиатуры, касаний,
акселерометра, кнопок гарнитуры).
UIResponder
Обработка событий
UIResponder — абстрактный класс (родитель UIViewController , UIView,
UIApplication), содержащий методы обработки событий (от клавиатуры, касаний,
акселерометра, кнопок гарнитуры).
Знакомый пример использования UIResponder — показ и скрытие клавиатуры:
// Показать клавиатуру
[self.textField becomeFirstResponder];
// Скрыть клавиатуру
[self.textField resignFirstResponder];
UIResponder
Обработка событий
UIEvent — общий класс для описания следующих типов событий:
● Touch events (касания)
● Motion events (акселерометр, гироскоп, тряска)
● Remote-control events (кнопки гарнитуры: пауза, перемотка, ...)
События UIEvent приходят в объекты-респондеры (наследники класса UIResponder):
UIViewController , UIView, UIApplication, UIWindow и их наследники.
UIEvent
Обработка событий
UIEvent — общий класс для описания следующих типов событий:
● Touch events (касания)
● Motion events (акселерометр, гироскоп, тряска)
● Remote-control events (кнопки гарнитуры: пауза, перемотка, ...)
События UIEvent приходят в объекты-респондеры (наследники класса UIResponder):
UIViewController , UIView, UIApplication, UIWindow и их наследники.
UIEvent
Обработка событий
UITouch — класс, представляющий касание.
● Каждый UITouch соответствует одному касанию (пальцу).
● Объект UITouch живёт на протяжении всего жеста, при этом меняются его координаты и timestamp.
● У UITouch можно спросить нынешние и предыдущие координаты относительно любого view или window.
● UITouch хранит информацию о view, на которой начался жест и о количестве тапов в начале жеста.
● Чтобы view отвечала на касания, нужно выставить свойство
userInteractionEnabled = YES.
● Один UIEvent типа UIEventTypeTouches содержит множество объектов UITouch.
UITouch
Обработка событий
Для обработки касаний в 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
Обработка событий
UITouch
@property (strong, nonatomic) UIView *chip;
//...
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = touches.anyObject;
if (touch.view == self.chip) {
CGPoint prevCenter = self.chip.center;
CGPoint touchLocation = [touch locationInView:self.view];
CGPoint touchPrevLocation = [touch previousLocationInView:self.view];
CGPoint offset = (CGPoint) {
touchLocation.x - touchPrevLocation.x,
touchLocation.y - touchPrevLocation.y
};
CGPoint center = (CGPoint) {
prevCenter.x + offset.x,
prevCenter.y + offset.y,
};
self.chip.center = center;
}
[super touchesMoved:touches withEvent:event];
}
Обработка событий
UIGestureRecognizer — абстрактный класс, предоставляющий интерфейс для работы с
жестами на более высоком уровне абстракции по сравнению с касаниями. Может оперировать
такими понятиями как скорость перемещения, направление свайпа, уровень зума, угол
поворота, длительность нажатия.
Конкретные реализации включают:
● UITapGestureRecognizer
● UIPinchGestureRecognizer
● UIRotationGestureRecognizer
● UISwipeGestureRecognizer
● UIPanGestureRecognizer
● UIScreenEdgePanGestureRecognizer
● UILongPressGestureRecognizer
UIGestureRecognizer
Обработка событий
UIGestureRecognizer — абстрактный класс, предоставляющий интерфейс для работы с
жестами на более высоком уровне абстракции по сравнению с касаниями. Может оперировать
такими понятиями как скорость перемещения, направление свайпа, уровень зума, угол
поворота, длительность нажатия.
Конкретные реализации включают:
● UITapGestureRecognizer
● UIPinchGestureRecognizer
● UIRotationGestureRecognizer
● UISwipeGestureRecognizer
● UIPanGestureRecognizer
● UIScreenEdgePanGestureRecognizer
● UILongPressGestureRecognizer
UIGestureRecognizer
Обработка событий
UIGestureRecognizer
● Объект конкретного класса UIGestureRecognizer добавляется на UIView и
отслеживает события на этой view.
● Рекогнайзеру задаётся пара target/action, в которую передаётся управление после
совершения пользователем соответствующего жеста.
● Рекогнайзер может иметь делегата, ответственного за разрешение конфликтов между
несколькими рекогнайзерами на одной view.
Обработка событий
UIGestureRecognizer
- (void)viewDidLoad
{
//...
UIRotationGestureRecognizer *gr =
[[UIRotationGestureRecognizer alloc]
initWithTarget:self
action:@selector(rotate:)];
[self.chip addGestureRecognizer:gr];
}
- (void)rotate:(UIRotationGestureRecognizer *)gr
{
self.chip.transform = CGAffineTransformMakeRotation(gr.rotation);
}
Обработка событий
UIEvent — общий класс для описания следующих типов событий:
● Touch events (касания)
● Motion events (акселерометр, гироскоп, тряска)
● Remote-control events (кнопки гарнитуры: пауза, перемотка, ...)
События UIEvent приходят в объекты-респондеры (наследники класса UIResponder):
UIViewController , UIView, UIApplication, UIWindow и их наследники.
UIEvent
Обработка событий
UIViewController является наследником UIResponder и может получать события:
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (motion == UIEventSubtypeMotionShake) {
// Реакция на тряску
//...
}
}
- (BOOL)canBecomeFirstResponder
{
return YES;
}
- (void)viewDidLoad
{
//...
[self becomeFirstResponder];
}
UIEvent
Обработка событий
@import CoreMotion;
//...
@property (strong, nonatomic) CMMotionManager *cmManager;
//...
self.cmManager = [[CMMotionManager alloc] init];
[self.cmManager
startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue]
withHandler:^(CMDeviceMotion *motion, NSError *error) {
// Динамика вращений: motion.rotationRate
// Динамика ускорений: motion.userAcceleration
// Текущая ориентация: motion.gravity
}];
Core Motion
Обработка событий
Локальные нотификации позволяют показывать всплывающее
сообщение в заранее определённое время, не полагаясь на то, что
приложение будет в этот момент запущено. Пользователю будет
предложено проигнорировать сообщение или запустить наше
приложение.
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];
Обработка событий
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
//...
}

More Related Content

Viewers also liked

iOS-01-Основы Objective-C
iOS-01-Основы Objective-CiOS-01-Основы Objective-C
iOS-01-Основы Objective-C
Noveo
 

Viewers also liked (20)

09 ns data
09   ns data09   ns data
09 ns data
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
 
10 ns error
10   ns error10   ns error
10 ns error
 
iOS-05_2-UIKit
iOS-05_2-UIKitiOS-05_2-UIKit
iOS-05_2-UIKit
 
11 ns copying, subscripting, fast enumeration
11   ns copying, subscripting, fast enumeration11   ns copying, subscripting, fast enumeration
11 ns copying, subscripting, fast enumeration
 
02 ns string
02   ns string02   ns string
02 ns string
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
 
07 ns value
07   ns value07   ns value
07 ns value
 
Rest
RestRest
Rest
 
шаринг
шарингшаринг
шаринг
 
iOS-01-Основы Objective-C
iOS-01-Основы Objective-CiOS-01-Основы Objective-C
iOS-01-Основы Objective-C
 
05 ns dictionary
05   ns dictionary05   ns dictionary
05 ns dictionary
 
iOS-02-Паттерны ООП
iOS-02-Паттерны ООПiOS-02-Паттерны ООП
iOS-02-Паттерны ООП
 
03 коллекции
03   коллекции03   коллекции
03 коллекции
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
 
работа с сетью
работа с сетьюработа с сетью
работа с сетью
 
iOS-05_1-UIKit
iOS-05_1-UIKitiOS-05_1-UIKit
iOS-05_1-UIKit
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
 
iOS-03-Управление памятью
iOS-03-Управление памятьюiOS-03-Управление памятью
iOS-03-Управление памятью
 
Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
 

Similar to обработка событий

Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеШкола-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Глеб Тарасов
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersИнтуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Глеб Тарасов
 

Similar to обработка событий (8)

AndroidMVPHelper
AndroidMVPHelperAndroidMVPHelper
AndroidMVPHelper
 
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеШкола-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
 
Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3Android Development Course in HSE lecture #3
Android Development Course in HSE lecture #3
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
 
Views обзор
Views обзорViews обзор
Views обзор
 
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersИнтуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
 
Дмитрий Котенко – Реактивный VIPER
Дмитрий Котенко – Реактивный VIPERДмитрий Котенко – Реактивный VIPER
Дмитрий Котенко – Реактивный VIPER
 
копия Module 3 2
копия Module 3 2копия Module 3 2
копия Module 3 2
 

More from Noveo

More from Noveo (20)

Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
 
Yii2
Yii2Yii2
Yii2
 
PHP basic
PHP basicPHP basic
PHP basic
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
MySQL
MySQLMySQL
MySQL
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)XML, JSON (Lecture 11 – XML, JSON)
XML, JSON (Lecture 11 – XML, JSON)
 
Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)
 

обработка событий

  • 2. UIResponder, UIEvent UITouch UIGestureRecognizer акселерометр, гироскоп локальные нотификации лекция 11 Обработка событий
  • 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
  • 9. Обработка событий UITouch @property (strong, nonatomic) UIView *chip; //... - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = touches.anyObject; if (touch.view == self.chip) { CGPoint prevCenter = self.chip.center; CGPoint touchLocation = [touch locationInView:self.view]; CGPoint touchPrevLocation = [touch previousLocationInView:self.view]; CGPoint offset = (CGPoint) { touchLocation.x - touchPrevLocation.x, touchLocation.y - touchPrevLocation.y }; CGPoint center = (CGPoint) { prevCenter.x + offset.x, prevCenter.y + offset.y, }; self.chip.center = center; } [super touchesMoved:touches withEvent:event]; }
  • 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.
  • 13. Обработка событий UIGestureRecognizer - (void)viewDidLoad { //... UIRotationGestureRecognizer *gr = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)]; [self.chip addGestureRecognizer:gr]; } - (void)rotate:(UIRotationGestureRecognizer *)gr { self.chip.transform = CGAffineTransformMakeRotation(gr.rotation); }
  • 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
  • 16. Обработка событий @import CoreMotion; //... @property (strong, nonatomic) CMMotionManager *cmManager; //... self.cmManager = [[CMMotionManager alloc] init]; [self.cmManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) { // Динамика вращений: motion.rotationRate // Динамика ускорений: motion.userAcceleration // Текущая ориентация: motion.gravity }]; Core Motion
  • 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 //... }