Programmation iOS M1 informatique -...

90
Programmation iOS M1 informatique Étienne Payet Département de mathématiques et d’informatique Ces transparents sont mis à disposition selon les termes de la Licence Creative Commons Paternité - Pas d’Utilisation Commerciale - Pas de Modification 3.0 non transcrit. Étienne Payet (DMI) Programmation iOS – M1 informatique 1 / 90

Transcript of Programmation iOS M1 informatique -...

Page 1: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Programmation iOSM1 informatique

Étienne Payet

Département de mathématiques et d’informatique

Ces transparents sont mis à disposition selon les termes de la Licence Creative Commons Paternité - Pasd’Utilisation Commerciale - Pas de Modification 3.0 non transcrit.

Étienne Payet (DMI) Programmation iOS – M1 informatique 1 / 90

Page 2: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Plan

1 Internationalisation

2 Protocoles et délégation

3 Géolocalisation

4 La classe CMMotionManager

5 Lecture audio

6 Gestes courants

7 Appareil photo

Étienne Payet (DMI) Programmation iOS – M1 informatique 2 / 90

Page 3: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Internationalisation

éléments culturels : éléments qui dépendent d’une région (langue,symbole monétaire, unités de mesure, format de date. . .)

l’utilisateur peut spécifier ces éléments grâce à l’application Réglagesd’iOS

idée : créer une application qui tient compte des éléments culturelschoisis par l’utilisateur

astuce : rendre le code indépendant de ces éléments (pour alléger lecode, faciliter la prise en compte d’une nouvelle région. . .)

Étienne Payet (DMI) Programmation iOS – M1 informatique 3 / 90

Page 4: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

La classe NSLocale

toute instance contient les éléments culturels suivants pour une régiondonnée : symbole monétaire, format de date, représentation desnombres à virgule, système métrique

[NSLocale currentLocale] renvoie une instance de NSLocale liée àla région choisie par l’utilisateur

méthode objectForKey: pour obtenir la valeur d’un élément culturelparticulier :[[NSLocale currentLocale]

objectForKey:NSLocaleCurrencySymbol]

Étienne Payet (DMI) Programmation iOS – M1 informatique 4 / 90

Page 5: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Chaînes de caractères

créer un fichier nommé Localizable.strings :

File → New → File . . . puis iOS → Resource → Strings File

sauvegarder dans le dossier Base.lproj

ce fichier doit être constitué d’items de la forme :/* commentaire */"clé" = "valeur";

dans le code, remplacer les chaînes de caractères par :NSLocalizedString(@"clé", @"commentaire")

Étienne Payet (DMI) Programmation iOS – M1 informatique 5 / 90

Page 6: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Chaînes de caractères

Localizable.strings/* Application Main Title */"title" = "Device Position";

/* Symbol for North */"North" = "N";

/* Symbol for South */"South" = "S";

/* Symbol for East */"East" = "E";

/* Symbol for West */"West" = "W";

ViewController.m- (void)viewDidLoad{

[super viewDidLoad];self.navigationItem.title =

NSLocalizedString(@"title",@"Application Main Title");

}

Étienne Payet (DMI) Programmation iOS – M1 informatique 6 / 90

Page 7: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Localisation

c’est le processus qui consiste à créer des ressources spécifiques pourdifférentes langues : chaînes de caractères, fichiers .storyboard. . .

pour ajouter de nouvelles ressources :

sélectionner le projet dans le navigateur d’Xcodefaire défiler l’éditeur jusqu’à l’item Localizationsappuyer sur +

les fichiers Localizable.strings spécifiques à chaque langue nediffèrent que par les valeurs des items (les commentaires et les clés nechangent pas)

Étienne Payet (DMI) Programmation iOS – M1 informatique 7 / 90

Page 8: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exercice

Étienne Payet (DMI) Programmation iOS – M1 informatique 8 / 90

Page 9: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exercice : indications

formatage de la date : classe NSDateFormatter

méthodes :

- (void)setDateStyle:(NSDateFormatterStyle)style- (void)setTimeStyle:(NSDateFormatterStyle)style

constantes pour le style :

NSDateFormatterNoStyle, NSDateFormatterShortStyle,NSDateFormatterMediumStyle, NSDateFormatterLongStyle,NSDateFormatterFullStyle

Étienne Payet (DMI) Programmation iOS – M1 informatique 9 / 90

Page 10: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Barre d’outils

instance de la classe UIToolbar (sous-classe de UIView)

s’inscrit donc dans une frame

peut se placer n’importe où sur l’écran (en général en haut ou en bas)

contient des boutons (classe UIBarButtonItem)

Étienne Payet (DMI) Programmation iOS – M1 informatique 10 / 90

Page 11: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Barre d’outils : apparence

dans la classe UIToolbar :

@property(nonatomic) UIBarStyle barStyle@property(nonatomic, retain) UIColor *tintColor@property(nonatomic, retain) UIColor *barTintColor

style de barre (UIBarStyle) :

UIBarStyleDefault, UIBarStyleBlack

Étienne Payet (DMI) Programmation iOS – M1 informatique 11 / 90

Page 12: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Barre d’outils : les boutons

propriété items de la classe UIToolbar : c’est un NSArray deUIBarButtonItem

@property(nonatomic, copy) NSArray *items

construction d’un UIBarButtonItem :

- (id)initWithTitle:(NSString *)titlestyle:(UIBarButtonItemStyle)style

target:(id)target action:(SEL)action

- (id)initWithCustomView:(UIView *)customView

- (id)initWithBarButtonSystemItem:(UIBarButtonSystemItem)itemtarget:(id)target action:(SEL)action

...

Étienne Payet (DMI) Programmation iOS – M1 informatique 12 / 90

Page 13: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Barre d’outils : les boutons

style des boutons avec titre (UIBarButtonItemStyle) :

UIBarButtonItemStylePlain, UIBarButtonItemStyleDone

boutons système (UIBarButtonSystemItem) :

UIBarButtonSystemItemDone, UIBarButtonSystemItemCancel,UIBarButtonSystemItemEdit, UIBarButtonSystemItemSave,UIBarButtonSystemItemFlexibleSpace,UIBarButtonSystemItemFixedSpace,UIBarButtonSystemItemAdd, ...

Étienne Payet (DMI) Programmation iOS – M1 informatique 13 / 90

Page 14: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exercice : ajout d’une barre d’outils à l’exercice précédent

Étienne Payet (DMI) Programmation iOS – M1 informatique 14 / 90

Page 15: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Plan

1 Internationalisation

2 Protocoles et délégation

3 Géolocalisation

4 La classe CMMotionManager

5 Lecture audio

6 Gestes courants

7 Appareil photo

Étienne Payet (DMI) Programmation iOS – M1 informatique 15 / 90

Page 16: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Protocole

c’est une liste de déclarations de propriétés et de méthodes

ce n’est pas une classe : pas d’instances, pas de variables d’instances

ne contient aucune implémentation de méthode : l’implémentation estlaissée aux classes qui se conforment au protocole

proche des interfaces de Java

Étienne Payet (DMI) Programmation iOS – M1 informatique 16 / 90

Page 17: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Définition d’un protocole

@protocol MyProtocol <NSObject>

@required

... // déclaration des éléments obligatoires

@optional

... // déclaration des éléments optionnels

@end

Étienne Payet (DMI) Programmation iOS – M1 informatique 17 / 90

Page 18: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Déclaration de conformité

MyClass.h@interface MyClass : NSObject <MyProtocol>

... // ne pas déclarer de méthodes du protocole

... // déclarer les propriétés du protocole utilisées

@end

MyClass.m@synthesize ... // les propriétés du protocole utilisées

implémentation des méthodes obligatoires du protocole

implémentation de méthodes optionnelles du protocole

Étienne Payet (DMI) Programmation iOS – M1 informatique 18 / 90

Page 19: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Délégation

schéma très courant sous Cocoa Touch

approche OO du traitement de certains événements

un délégué est associé à un objet ; cet objet envoie des messages à sondélégué lorsque certains événements se produisent

les messages envoyés au délégué correspondent à des méthodes d’unprotocole auquel le délégué se conforme

Étienne Payet (DMI) Programmation iOS – M1 informatique 19 / 90

Page 20: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple : un formulaire de saisie

AddViewController.h@protocol AddDelegate <NSObject>

- (void)addName:(NSString *)name;

@end

@interface AddViewController : UIViewController <UITextFieldDelegate>

@property (weak, nonatomic) IBOutlet UITextField *nameTextField;@property(nonatomic, assign) id<AddDelegate> delegate;

- (IBAction)cancel:(id)sender;- (IBAction)save:(id)sender;

@end

Étienne Payet (DMI) Programmation iOS – M1 informatique 20 / 90

Page 21: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple : un formulaire de saisie

AddViewController.m- (IBAction)cancel:(id)sender {

[[self delegate] addName:nil];}

- (IBAction)save:(id)sender {[[self delegate] addName:[[self nameTextField] text]];

}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {[textField resignFirstResponder];return YES;

}

Étienne Payet (DMI) Programmation iOS – M1 informatique 21 / 90

Page 22: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple : utilisation du formulaire

MyTableViewController.h#import "AddViewController.h"

@interface MyTableViewController : UITableViewController <AddDelegate>{

NSMutableArray *objects;}

@end

Étienne Payet (DMI) Programmation iOS – M1 informatique 22 / 90

Page 23: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple : utilisation du formulaire

MyTableViewController.m- (void)addName:(NSString *)name {

if (name) {if (!self.objects) self.objects = [[NSMutableArray alloc] init];

[self.objects insertObject:name atIndex:0];NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];[self.tableView insertRowsAtIndexPaths:@[indexPath]

withRowAnimation:UITableViewRowAnimationAutomatic];}

[self dismissViewControllerAnimated:YES completion:NULL];}

Étienne Payet (DMI) Programmation iOS – M1 informatique 23 / 90

Page 24: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple : utilisation du formulaire

dans Main.storyboard :

il y a un bouton + dans la barre de titre de laUITableViewController

un segue (présentation modale) relie ce bouton au formulaire de saisie,l’identifiant de ce segue est addName

Étienne Payet (DMI) Programmation iOS – M1 informatique 24 / 90

Page 25: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple : utilisation du formulaire

MyTableViewController.m- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

...if ([[segue identifier] isEqualToString:@"addName"]) {

AddViewController *controller =(AddViewController *)[segue destinationViewController];

[controller setDelegate:self];}

}

Étienne Payet (DMI) Programmation iOS – M1 informatique 25 / 90

Page 26: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exercice

Étienne Payet (DMI) Programmation iOS – M1 informatique 26 / 90

Page 27: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple délegation : UIActionSheet

Étienne Payet (DMI) Programmation iOS – M1 informatique 27 / 90

Page 28: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple délegation : UIActionSheet

pour confirmer une action potentiellement dangereuse

protocole UIActionSheetDelegate

création :

- (id)initWithTitle:(NSString *)titledelegate:(id<UIActionSheetDelegate>)delegate

cancelButtonTitle:(NSString *)cancelButtonTitledestructiveButtonTitle:(NSString *)destructiveButtonTitle

otherButtonTitles:(NSString *)otherButtonTitles,...nil

Étienne Payet (DMI) Programmation iOS – M1 informatique 28 / 90

Page 29: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple délegation : UIActionSheet

affichage :

- (void)showFromRect:(CGRect)rectinView:(UIView *)view

animated:(BOOL)animated

- (void)showFromBarButtonItem:(UIBarButtonItem *)itemanimated:(BOOL)animated

- (void)showFromTabBar:(UITabBar *)view

- (void)showFromToolbar:(UIToolbar *)view

- (void)showInView:(UIView *)view

Étienne Payet (DMI) Programmation iOS – M1 informatique 29 / 90

Page 30: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple délegation : UIActionSheet

protocole UIActionSheetDelegate :

- (void)actionSheet:(UIActionSheet *)actionSheetclickedButtonAtIndex:(NSInteger)buttonIndex

- (void)actionSheetCancel:(UIActionSheet *)actionSheet

...

Étienne Payet (DMI) Programmation iOS – M1 informatique 30 / 90

Page 31: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Autre exemple délegation : UIAlertView

Étienne Payet (DMI) Programmation iOS – M1 informatique 31 / 90

Page 32: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

UIActionSheet et UIAlertView

attention : UIActionSheet et UIAlertView sont obsolètes (deprecated)depuis iOS 8

elles sont toutes deux remplaçées par la classe UIAlertController

voir la documentation

Étienne Payet (DMI) Programmation iOS – M1 informatique 32 / 90

Page 33: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exercice : extension de l’exercice précédent

Étienne Payet (DMI) Programmation iOS – M1 informatique 33 / 90

Page 34: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Plan

1 Internationalisation

2 Protocoles et délégation

3 Géolocalisation

4 La classe CMMotionManager

5 Lecture audio

6 Gestes courants

7 Appareil photo

Étienne Payet (DMI) Programmation iOS – M1 informatique 34 / 90

Page 35: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

CoreLocation

c’est un framework = collection de classes

contient les classes qui permettent de gérer la géolocalisation

non-inclus par défaut, le programmeur doit l’ajouter à l’application :

sélectionner le projet dans le navigateur d’Xcode

sélectionner la cible (target) dans la partie éditeur

dérouler Link Binary With Libraries

appuyer sur + et choisir CoreLocation.framework

Étienne Payet (DMI) Programmation iOS – M1 informatique 35 / 90

Page 36: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Classe CLLocationManager

fournie par CoreLocation

fait l’interface avec le matériel de géolocalisation

toute instance a un délégué se conformant au protocoleCLLocationManagerDelegate

des messages sont envoyés au délégué lorsque certains événements seproduisent (nouvelle position, entrée dans une zone, échec delocalisation. . .)

Étienne Payet (DMI) Programmation iOS – M1 informatique 36 / 90

Page 37: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Protocole CLLocationManagerDelegate

@protocol CLLocationManagerDelegate <NSObject>

@optional

- (void)locationManager:(CLLocationManager *)managerdidUpdateLocations:(NSArray *)locations;

- (void)locationManager:(CLLocationManager *)managerdidFailWithError:(NSError *)error;

...

@end

Étienne Payet (DMI) Programmation iOS – M1 informatique 37 / 90

Page 38: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple : afficher sa position

ViewController.h#import <CoreLocation/CoreLocation.h>

@interface ViewController : UIViewController <CLLocationManagerDelegate>{

CLLocationManager *locationManager;}@end

Étienne Payet (DMI) Programmation iOS – M1 informatique 38 / 90

Page 39: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple : afficher sa position

ViewController.m- (void)viewDidLoad {

...if ([CLLocationManager locationServicesEnabled]) {

locationManager = [[CLLocationManager alloc] init];[locationManager setDelegate:self];[locationManager setDistanceFilter:50];[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];[locationManager startUpdatingLocation];

}...

}

...

Étienne Payet (DMI) Programmation iOS – M1 informatique 39 / 90

Page 40: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple : afficher sa position

ViewController.m...

- (void)locationManager:(CLLocationManager *)managerdidUpdateLocations:(NSArray *)locations {

CLLocation* location = [locations lastObject];CLLocationDegrees latitude = [location coordinate].latitude;CLLocationDegrees longitude = [location coordinate].longitude;NSLog(@"(%.3f,%.3f)", latitude, longitude);[locationManager stopUpdatingLocation];

}

- (void)locationManager:(CLLocationManager *)managerdidFailWithError:(NSError *)error {

NSLog(@"Could not find location: %@", error);}

Étienne Payet (DMI) Programmation iOS – M1 informatique 40 / 90

Page 41: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Un nouveau système de permission depuis iOS8

WhenInUse : l’application reçoit des mises-à-jour de localisationuniquement quand elle s’exécute au premier plan

Always : l’application reçoit des mises-à-jour de localisation quand elles’exécute au premier plan et en arrière-plan

les 2 peuvent figurer dans une même application

Étienne Payet (DMI) Programmation iOS – M1 informatique 41 / 90

Page 42: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Un nouveau système de permission depuis iOS8

il faut requérir explicitement la permission : méthodesrequestWhenInUseAuthorization et requestAlwaysAuthorization

- (void)viewDidLoad {...if ([CLLocationManager locationServicesEnabled]) {

locationManager = [[CLLocationManager alloc] init];

// Vérifier si iOS8:if ([locationManager respondsToSelector:

@selector(requestWhenInUseAuthorization)])[self.locationManager requestWhenInUseAuthorization];

[locationManager startUpdatingLocation];}...

Étienne Payet (DMI) Programmation iOS – M1 informatique 42 / 90

Page 43: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Un nouveau système de permission depuis iOS8

pour que ça fonctionne en arrière-plan

Étienne Payet (DMI) Programmation iOS – M1 informatique 43 / 90

Page 44: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Un nouveau système de permission depuis iOS8

à déclarer dans le fichier info.plist :

<key>NSLocationWhenInUseUsageDescription</key><string>Message WhenInUse</string>

<key>NSLocationAlwaysUsageDescription</key><string>Message Always</string>

les messages s’affichent dans une UIAlertView lorsque la permissionest requise

Étienne Payet (DMI) Programmation iOS – M1 informatique 44 / 90

Page 45: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Un nouveau système de permission depuis iOS8

alerte WhenInUse alerte Always

Étienne Payet (DMI) Programmation iOS – M1 informatique 45 / 90

Page 46: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exercice

détection des changements de position

l’affichage tient compte de la langue

Étienne Payet (DMI) Programmation iOS – M1 informatique 46 / 90

Page 47: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Passage dans une zone circulaire

classe CLCircularRegion (sous-classe de CLRegion)

création d’une instance :- (id)initWithCenter:(CLLocationCoordinate2D)center

radius:(CLLocationDistance)radiusidentifier:(NSString *)identifier

center = centre (latitude, longitude) de la zoneradius = rayon (mètres) de la zone

Étienne Payet (DMI) Programmation iOS – M1 informatique 47 / 90

Page 48: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Passage dans une zone circulaire

iOS8 : permission Always obligatoire

méthodes de la classe CLLocationManager :- (void)startMonitoringForRegion:(CLRegion *)region- (void)stopMonitoringForRegion:(CLRegion *)region

Étienne Payet (DMI) Programmation iOS – M1 informatique 48 / 90

Page 49: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Passage dans une zone circulaire

@protocol CLLocationManagerDelegate <NSObject>

@optional

...

- (void)locationManager:(CLLocationManager *)managerdidEnterRegion:(CLRegion *)region;

- (void)locationManager:(CLLocationManager *)managerdidExitRegion:(CLRegion *)region;

- (void)locationManager:(CLLocationManager *)managermonitoringDidFailForRegion:(CLRegion *)region

withError:(NSError *)error;

...

@end

Étienne Payet (DMI) Programmation iOS – M1 informatique 49 / 90

Page 50: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Passage dans une zone circulaire

ViewController.m- (void)viewDidLoad{

...CLLocationCoordinate2D center =

CLLocationCoordinate2DMake(-33.8634, 151.211);

CLCircularRegion *region = [[CLCircularRegion alloc]initWithCenter:centerradius:100000.0identifier:@"Sydney"];

...}

Étienne Payet (DMI) Programmation iOS – M1 informatique 50 / 90

Page 51: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Passage dans une zone circulaire

ViewController.m- (void)locationManager:(CLLocationManager *)manager

didEnterRegion:(CLRegion *)region{

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Attention"message:@"Entrée"

delegate:nilcancelButtonTitle:@"OK"otherButtonTitles:nil];

[alert show];}

Étienne Payet (DMI) Programmation iOS – M1 informatique 51 / 90

Page 52: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exercice

ajoutez un mécanisme de détectiond’entrée/sortie d’une zone circulairedéfinie en dur dans le programme

Étienne Payet (DMI) Programmation iOS – M1 informatique 52 / 90

Page 53: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

MapKit

c’est un framework

non-inclus par défaut

fournit la classe MKMapView pour l’affichage de cartes

- utilise CoreLocation en interne

- pour activer la recherche de la position et son affichage sur une carte :

@property(nonatomic) BOOL showsUserLocation

- toute instance a un délégué se conformant au protocoleMKMapViewDelegate

Étienne Payet (DMI) Programmation iOS – M1 informatique 53 / 90

Page 54: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Protocole MKMapViewDelegate

@protocol MKMapViewDelegate <NSObject>

@optional

- (void)mapView:(MKMapView *)mapViewdidUpdateUserLocation:(MKUserLocation *)userLocation

- (void)mapView:(MKMapView *)mapViewdidFailToLocateUserWithError:(NSError *)error;

...

@end

Étienne Payet (DMI) Programmation iOS – M1 informatique 54 / 90

Page 55: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple : afficher sa position sur une carte

ViewController.h#import <UIKit/UIKit.h>#import <MapKit/MapKit.h>

@interface ViewController : UIViewController<CLLocationManagerDelegate, MKMapViewDelegate> {

CLLocationManager *locationManager;CLLocation *currentLocation;

}

@property (weak, nonatomic) IBOutlet MKMapView *worldView;

- (IBAction)ouSuisJe:(id)sender;

@end

Étienne Payet (DMI) Programmation iOS – M1 informatique 55 / 90

Page 56: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple : afficher sa position sur une carte

ViewController.m- (void)viewDidLoad {

[super viewDidLoad];

if ([CLLocationManager locationServicesEnabled]) {locationManager = [[CLLocationManager alloc] init];...[locationManager setDelegate:self];

if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])

[locationManager requestWhenInUseAuthorization];

[[self worldView] setShowsUserLocation:YES];

}else { ... }

}

Étienne Payet (DMI) Programmation iOS – M1 informatique 56 / 90

Page 57: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple : afficher sa position sur une carte

ViewController.m- (IBAction)ouSuisJe:(id)sender {

CLLocationCoordinate2D location = [currentLocation coordinate];MKCoordinateRegion region =

MKCoordinateRegionMakeWithDistance(location, 5000, 5000);[[self worldView] setRegion:region animated:YES];

}

- (void)mapView:(MKMapView *)mapViewdidUpdateUserLocation:(MKUserLocation *)userLocation {

currentLocation = [userLocation location];}

Étienne Payet (DMI) Programmation iOS – M1 informatique 57 / 90

Page 58: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Types de cartes

propriété mapType (de type NSUInteger) de la classe MKMapView

3 valeurs possibles :MKMapTypeStandard (plan)MKMapTypeSatelliteMKMapTypeHybrid

Étienne Payet (DMI) Programmation iOS – M1 informatique 58 / 90

Page 59: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exercice

le bouton « Où suis-je » affiche laposition du terminal

les autres boutons permettent dechanger le type de la carte

Étienne Payet (DMI) Programmation iOS – M1 informatique 59 / 90

Page 60: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Annoter une carte

créer une classe se conformant au protocole MKAnnotation

méthode de la classe MKMapView :

- (void)addAnnotation:(id < MKAnnotation >)annotation

Étienne Payet (DMI) Programmation iOS – M1 informatique 60 / 90

Page 61: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Protocole MKAnnotation

ensemble d’éléments pour les classes dont des instances sont affichées surune carte

@protocol MKAnnotation <NSObject>

@required

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

@optional

@property (nonatomic, readonly, copy) NSString *title;@property (nonatomic, readonly, copy) NSString *subtitle

@end

Étienne Payet (DMI) Programmation iOS – M1 informatique 61 / 90

Page 62: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Épingle

instance de la classe MKPinAnnotationView

une vue (callout) est affichée lorsqu’on effectue un tap sur une épingle

méthodes du protocole MKMapViewDelegate :

- (MKAnnotationView*)mapView:(MKMapView *)mapViewviewForAnnotation:(id<MKAnnotation>)annotation

- (void)mapView:(MKMapView *)mapViewannotationView:(MKAnnotationView *)viewcalloutAccessoryControlTapped:(UIControl *)control

Étienne Payet (DMI) Programmation iOS – M1 informatique 62 / 90

Page 63: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Épingle

- (MKAnnotationView*)mapView:(MKMapView *)mapViewviewForAnnotation:(id<MKAnnotation>)annotation {

if (annotation == [mapView userLocation]) return nil;

MKPinAnnotationView *pin =[[MKPinAnnotationView alloc] initWithAnnotation:annotation

reuseIdentifier:@"dmi"];[pin setPinColor:MKPinAnnotationColorRed];[pin setCanShowCallout:YES];[pin setRightCalloutAccessoryView:

[UIButton buttonWithType:UIButtonTypeDetailDisclosure]];

return pin;}

Étienne Payet (DMI) Programmation iOS – M1 informatique 63 / 90

Page 64: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Épingle

- (void)mapView:(MKMapView *)mapViewannotationView:(MKAnnotationView *)viewcalloutAccessoryControlTapped:(UIControl *)control {

CLLocationCoordinate2D coo = [[view annotation] coordinate];NSLog(@"Lat: %2.3f, Long: %2.3f", coo.latitude, coo.longitude);

}

Étienne Payet (DMI) Programmation iOS – M1 informatique 64 / 90

Page 65: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exercice

Étienne Payet (DMI) Programmation iOS – M1 informatique 65 / 90

Page 66: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exercice

un tap sur le i© affiche la position de lapunaise dans la zone de texte

Étienne Payet (DMI) Programmation iOS – M1 informatique 66 / 90

Page 67: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Plan

1 Internationalisation

2 Protocoles et délégation

3 Géolocalisation

4 La classe CMMotionManager

5 Lecture audio

6 Gestes courants

7 Appareil photo

Étienne Payet (DMI) Programmation iOS – M1 informatique 67 / 90

Page 68: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

La classe CMMotionManager

mesure de données liées au déplacement du terminal

accéléromètre : accélération (force en G sur les 3 axes)

gyroscope : orientation (rotation sur les 3 axes en radians/seconde)

magnétomètre : champ magnétique (en µT sur les 3 axes)

ne créer qu’une seule instance par application

CMMotionManager *manager = [[CMMotionManager alloc] init];

importer le framework CoreMotion

Étienne Payet (DMI) Programmation iOS – M1 informatique 68 / 90

Page 69: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Données brutes

classes CMAccelerometerData, CMGyroData, CMMagnetometerData

fixer l’intervalle de mesure : setAccelerometerUpdateInterval,setGyroUpdateInterval, setMagnetometerUpdateInterval (argumentde type NSTimeInterval)

démarrage des mesures : startAccelerometerUpdates,startGyroUpdates, startMagnetometerUpdates

arrêt des mesures : stopAccelerometerUpdates, stopGyroUpdates,stopMagnetometerUpdates

propriétés booléennes : accelerometerActive, accelerometerAvailable,gyroActive, gyroAvailable, magnetometerActive, magnetometerAvailable

Étienne Payet (DMI) Programmation iOS – M1 informatique 69 / 90

Page 70: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Données pré-traitées

classe CMDeviceMotion

fixer l’intervalle de mesure : setDeviceMotionUpdateInterval(argument de type NSTimeInterval)

démarrage des mesures : startDeviceMotionUpdates

arrêt des mesures : stopDeviceMotionUpdates

propriétés booléennes : deviceMotionActive, deviceMotionAvailable

Étienne Payet (DMI) Programmation iOS – M1 informatique 70 / 90

Page 71: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Récupération des données

données brutes : voir la documentation

données pré-traitées (ici manager est instance de CMMotionManager) :

- (void)maj {CMAcceleration acceleration =

[[manager deviceMotion] userAcceleration];NSLog(@"x = %f G", acceleration.x);

CMRotationRate rotation = [[manager deviceMotion] rotationRate];NSLog(@"x = %f rad/s", rotation.x);

CMCalibratedMagneticField magneticField =[[manager deviceMotion] magneticField];

NSLog(@"x = %f µT", magneticField.field.x);}

Étienne Payet (DMI) Programmation iOS – M1 informatique 71 / 90

Page 72: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Récupération des données

quand on en a besoin

on peut utiliser un NSTimer pour des récupérations régulières :NSTimeInterval intervalle = 1.0;NSTimer *alarme =

[NSTimer scheduledTimerWithTimeInterval:intervalletarget:self

selector:@selector(maj)userInfo:nilrepeats:YES];

Étienne Payet (DMI) Programmation iOS – M1 informatique 72 / 90

Page 73: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exercice

Étienne Payet (DMI) Programmation iOS – M1 informatique 73 / 90

Page 74: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Plan

1 Internationalisation

2 Protocoles et délégation

3 Géolocalisation

4 La classe CMMotionManager

5 Lecture audio

6 Gestes courants

7 Appareil photo

Étienne Payet (DMI) Programmation iOS – M1 informatique 74 / 90

Page 75: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

La classe AVAudioPlayer

lecture d’un fichier audio

inclure le framework AVFoundation

importer AVFoundation/AVFoundation.h

initialisation :- (instancetype)initWithContentsOfURL:(NSURL *)url

error:(NSError **)outError;- (instancetype)initWithData:(NSData *)data

error:(NSError **)outError;

actions :- (BOOL)play; - (BOOL)prepareToPlay;- (void)pause; - (void)stop;

Étienne Payet (DMI) Programmation iOS – M1 informatique 75 / 90

Page 76: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Le protocole AVAudioPlayerDelegate

méthodes :

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)playersuccessfully:(BOOL)flag;

- (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)playererror:(NSError *)error;

Étienne Payet (DMI) Programmation iOS – M1 informatique 76 / 90

Page 77: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple

ViewController.h#import <AVFoundation/AVFoundation.h>

@interface ViewController : UIViewController <AVAudioPlayerDelegate> {AVAudioPlayer *myPlayer;

}

- (IBAction)jouerUnSon:(id)sender;

@end

Étienne Payet (DMI) Programmation iOS – M1 informatique 77 / 90

Page 78: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple

ViewController.m- (void)viewDidLoad {

[super viewDidLoad];

NSError *error;NSString *soundFilePath =

[[NSBundle mainBundle] pathForResource:@"son"ofType:@"mp3"];

NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath];myPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL

error:&error];

if (myPlayer) [myPlayer setDelegate:self];else {

UIAlertView *alert = [[UIAlertView alloc] ...];[alert show];

}}

Étienne Payet (DMI) Programmation iOS – M1 informatique 78 / 90

Page 79: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple

ViewController.m- (IBAction)jouerUnSon:(id)sender {

[mPlayer play];}

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)playersuccessfully:(BOOL)flag {

if (!flag) {UIAlertView *alert = [[UIAlertView alloc]

initWithTitle:@"Erreur" ...];[alert show];

}}

Étienne Payet (DMI) Programmation iOS – M1 informatique 79 / 90

Page 80: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exercice

la balle se déplace sur l’écran enfonction de l’inclinaison de l’appareil,elle ne sort pas de l’écran

le UISwitch active/désactive ledéplacement de la balle

le UIStepper modifie la vitesse

lorsqu’on secoue l’appareil, la ballechange de couleur

lorsque la balle touche le bord del’écran, un son est émis

Étienne Payet (DMI) Programmation iOS – M1 informatique 80 / 90

Page 81: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Plan

1 Internationalisation

2 Protocoles et délégation

3 Géolocalisation

4 La classe CMMotionManager

5 Lecture audio

6 Gestes courants

7 Appareil photo

Étienne Payet (DMI) Programmation iOS – M1 informatique 81 / 90

Page 82: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Gestes courants

iOS propose des classes permettant de gérer les gestes courants (appuilong, tap, balayage, pinch, rotation. . . ) :

UILongPressGestureRecognizerUITapGestureRecognizerUISwipeGestureRecognizerUIPinchGestureRecognizerUIRotationGestureRecognizer...

ces classes héritent de la classe UIGestureRecognizer

Étienne Payet (DMI) Programmation iOS – M1 informatique 82 / 90

Page 83: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

UIGestureRecognizer

on initialise une instance de UIGestureRecognizer avec la méthode

initWithTarget:action:

paramètres = objet cible et méthode à invoquer lorsque le geste estreconnu

la méthode à invoquer doit avoir la forme :- (void)nom:(UIGestureRecognizer *)recognizer

Étienne Payet (DMI) Programmation iOS – M1 informatique 83 / 90

Page 84: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Ajout d’un geste à une vue

pour qu’une vue reconnaisse un geste, on appelle la méthode de UIView

- (void)addGestureRecognizer:(UIGestureRecognizer *)recognizer

paramètre = instance de UIGestureRecognizer correspondant au gestesouhaité

Étienne Payet (DMI) Programmation iOS – M1 informatique 84 / 90

Page 85: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exemple : double tap

dans une sous-classe de UIViewController :

- (void)viewDidLoad {...UITapGestureRecognizer *tapDetect =

[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapDetection:)];

[tapDetect setNumberOfTapsRequired:2];[[self view] addGestureRecognizer:tapDetect];...

}

-(void)tapDetection:(UITapGestureRecognizer *)tapDetect {[[self monLabel] setText:@"Double tap détecté !"];

}

Étienne Payet (DMI) Programmation iOS – M1 informatique 85 / 90

Page 86: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Propriétés spécifiques

chaque sous-classe de UIGestureRecognizer dispose de propriétésspécifiques

exemples :UILongPressGestureRecognizer : minimumPressDurationUITapGestureRecognizer : numberOfTapsRequiredUIRotationGestureRecognizer : rotation. . .

voir la documentation

Étienne Payet (DMI) Programmation iOS – M1 informatique 86 / 90

Page 87: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exercice

écrivez une application qui affiche un message à l’écran lorsque l’un desgestes suivants est reconnu :

double tappression longuebalayagepinchrotation

Étienne Payet (DMI) Programmation iOS – M1 informatique 87 / 90

Page 88: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Exercice : jeu du taquin à 9 cases

https://fr.wikipedia.org/wiki/Taquin

le déplacement d’une case se fait par unmouvement de balayage (swipe)

un son est émis lorsqu’une case estdéplacée

un double tap permet de recommencerla partie en cours

lorsque l’appareil est secoué, le jeu estmélangé et une nouvelle partie démarre

gérer la rotation de l’écran (modesportrait et paysage autorisés)

Étienne Payet (DMI) Programmation iOS – M1 informatique 88 / 90

Page 89: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Plan

1 Internationalisation

2 Protocoles et délégation

3 Géolocalisation

4 La classe CMMotionManager

5 Lecture audio

6 Gestes courants

7 Appareil photo

Étienne Payet (DMI) Programmation iOS – M1 informatique 89 / 90

Page 90: Programmation iOS M1 informatique - univ-reunion.frlim.univ-reunion.fr/staff/epayet/Teaching/Prog... · Plan 1 Internationalisation 2 Protocolesetdélégation 3 Géolocalisation 4

Capture et sauvegarde d’une photo

2 possibilités :

utiliser la classe UIImagePickerController pour prendre et éditerune photo en utilisant le logiciel de capture fourni par iOS

créer son propre logiciel de capture

détails :

http://developer.apple.com/library/ios/#documentation/AudioVideo/

Conceptual/CameraAndPhotoLib_TopicsForIOS/Introduction/Introduction.html

Étienne Payet (DMI) Programmation iOS – M1 informatique 90 / 90