SlideShare une entreprise Scribd logo
SDK iPhone Programme de formation
Présentation Lancé en mars 2008 Compatible avec Mac OS X Langage : Cocoa Environnement de développement : Xcode et Interface Builder Développement pour iPhone et iPod Touch 100 000 applications disponibles 3 milliards de téléchargements (21 milliards en 2013) 75% des applications sont gratuites
Plan de formation 1. Introduction 2. Création d’un projet 3. Programmation 4. Interface utilisateur 5. Rotation et dimensionnement 6. Applications à vues multiples 7. Tab Bars et Pickers 8. Table Views
Plan de formation 9. Navigation Controllers 10.Paramètres de l’application 11. Persistance des données 12. Dessiner avec Quartz 13. Interaction de l’utilisateur 14. Utilisation de la caméra et de l’album photo 15. Publication sur l’AppStore
1. Introduction
1. Introduction Ouvrir un compte Apple http://developer.apple.com/iphone/ SDK version 3.1.2 Téléchargement du SDK
1. Introduction Uniquement une application en exécution Uniquement une fenêtre à la fois Accès limité au workspace de l’application Temps de réponse limité Ecran limité Ressources systèmes limitées Pas de souris ni de clavier physique Caractéristiques d’une application
1. Introduction Programmation Cocoa Objets Objective-C NSString NSNumber NSArray NSMutableArray NSDictionary NSMutableDictionary NSDate int BOOL Envoyer des messages aux objets Autres langages :  alert.show(); En Objective-C :  [alert show];
1. Introduction Programmation Cocoa Envoyer des messages aux objets avec des paramètres Autres langages :  alert.show("A Funny Message", 3); En Objective-C :   [alert show:@"I say this!" thisManyTimes:3]; Instancier des objets myClass *myObject = [[myClass alloc] init]; Libération des objets [myObject release];
1. Introduction Programmation Cocoa Pattern de l’utilisation des objets Management de la mémoire Management manuel de la mémoire avec le «Comptage des références» Le système garde en mémoire les objets dont leur référence est différente à 0. Chaque composant qui nécessite d’utiliser un objet augmente sa référence de 1. myClass *myObject = [[myClass alloc] init]; ... [myObject doStuff]; ... [myObject release];
1. Introduction Programmation Cocoa Classe NSString NSString *lotsOfInsertedStuffString = [NSString stringWithFormat:@"I am adding this number: %i and this string:%@.", 45, myString]; NSLog(lotsOfInsertedStuffString); NSString *myString = [[NSString alloc] initWithString:@"A String"]; NSLog(myString); [myString release]; Ou NSString *myString = @"A String"; NSLog(myString);
1. Introduction Programmation Cocoa Classe NSNumber On peut utiliser de la classe NSNumber ou les types en C : int i = 3; NSLog(@"i = %i", i); double d = 3.4; NSLog(@"d = %f", d); double dPlusi = d + i; NSLog(@"d + i = %f", dPlusi);
1. Introduction Programmation Cocoa Classe NSArray NSMutableArray *myArray = [[NSMutableArray alloc] init]; [myArray addObject:@"Element 1"]; [myArray addObject:@"Element 2"]; NSLog([myArray objectAtIndex:0]);  NSLog([myArray lastObject]); for (NSString *s in myArray) { NSLog(s); } [myArray release];
2. Création d’un projet
2. Création d’un projet
2. Création d’un projet Xcode
2. Création d’un projet Application Delegate Il s’agit de la classe en charge du lancement de l’application et de l’affichage de la fenêtre principale. Vous pouvez vous en servir pour initialiser des éléments particuliers communs à l’ensemble des éléments de votre application : connexion à une base de données, configuration générale, Cette classe est obligatoire pour toute application IPhone, elle se conforme au protocole UIApplicationDelegate et implémente la méthode -(void)applicationDidFinishLaunching... Cette méthode est appelée directement après le lancement de l'application.
2. Création d’un projet Frameworks Comme son nom l'indique, cette partie contient les "includes" des Frameworks utilisés dans le projet.  Par défaut, vous avez les 3 principaux: UIKit, Foundation et CoreGraphics. Products Contient le fichier généré par la compilation, à savoir l’application
2. Création d’un projet File’s Owner : instance de l’objet qui a chargé le fichier nib (NeXT Interface Builder) du disque First Responder : objet avec lequel l’utilisateur intéragit Autres objets : Instances d’objets qui seront créés lorsque le fichier nib se chargera Interface Builder
2. Création d’un projet MainWindow.xib Ce fichier permet de créer les instances de «Application Delegate», de la fenêtre principale et du «View Controller» lors de la compilation Instance de Button_FunAppDelegate Instance de  Button_FunViewController Fenêtre unique  de l’application
2. Création d’un projet Image .png obligatoire et de taille de 57 x 57 pixels Importer l’image dans le projet Spécifier dans les paramètres de l’application («mon_prj-Info.plist») une icône Ajout d’une icône à l’application
2. Création d’un projet Exercice 1 : Créer un projet Hello World Placer un label «Hello World» sur la vue Changer ses attributs (Taille, couleur ...) Ajouter une icône à l’application Compiler
3. Programmation
3. Programmation Architecture et méthode de conception qui organise l’interface homme-machine (IHM) Division de l’IHM en :  Un modèle (Modèle de données) Une vue (Présentation, interface) Un contrôleur (Logique de contrôle, gestion des évènements, synchronisation) Concept du «Modèle-Vue-Contrôleur» Lorsqu'un client envoie une requête à l'application : la requête est analysée par le contrôleur le contrôleur demande au modèle approprié d’effectuer les traitements le contrôleur renvoie la vue adaptée
3. Programmation Exercice 2 : Créer un projet Button Fun Ajouter deux boutons et un label
3. Programmation Classe Controller.h Sous classe de  UIViewController
3. Programmation Les pointeurs Déclaration : Les fonctions Déclaration : Eviter de devoir définir  les accesseurs et les mutateurs Options de création des  accesseurs et mutateurs  par le compilateur Les accesseurs Identiques
3. Programmation Les types de données : NSString NSNumber NSArray NSMutableArray NSDictionary NSMutableDictionary NSDate int BOOL Exemple : .h : NSNumber  * my_number ; @property  ( nonatomic ,  retain ) NSNumber *  my_number ; .m : @synthesize  my_number;
3. Programmation Classe Controller.m
3. Programmation Classe Controller.m
3. Programmation Exercice 2 (suite) : Déclarer un pointeur «statusText» sur le label Déclarer une fonction «buttonPressed»
3. Programmation Exercice 2 : Correction .h .m Création des accesseurs et mutateurs Implémentation de la fonction
3. Programmation Exercice 2 : Correction .m Concernant l’allocation  ... ou ...
3. Programmation Connecter des pointeurs 1. Relier le File’s Owner au Label pour créer la connexion 2. Choisir le pointeur
3. Programmation Spécifier les actions 1. Choisir l’action 2. Choisir l’évènement et glisser à partir du cercle à droite jusqu’au File’s Owner 3. Sélectionner dans la pop-up la méthode à exécuter
3. Programmation Exercice 2 (suite) : Relier les pointeurs avec les objets présents dans Interface Builder Tester l’application
4. Interface utilisateur
4. Interface utilisateur Liste des contrôles disponibles dans IB : Image View Text Field Slider Segmented Control Button Label Switch Les contrôles peuvent être du type  : Actif (Button ...) Statique (Label ...) Passif (Text Field ...)
4. Interface utilisateur Liste des images disponibles Paramètres de Image View : Permet de définir comment l’image se trouve par rapport à la vue dans laquelle elle se situe Appliquer un effet de transparence à l’image Pas d’impact sur une image Assigner un identifiant à cette image Permet de modifier la manière dont l’image est dessinée Permet à l’utilisateur d’effectuer des interactions Permet de recevoir plusieurs évènement de multi touche
4. Interface utilisateur Valeur par défaut Paramètres de Text Field : Afficher une légende dans le champs Alignement Modifier l’apparence Type de valeurs possibles dans un Text Field Attributs hérités de UIControl  (Peu sont utiles à ce contrôle)
4. Interface utilisateur Exercice 3 : Créer un projet «Control Fun» Créer l’interface comme celle présentée à droite Déterminer le nombre de pointeurs nécessaires Déterminer le nombre d’actions nécessaires Implémenter l’ImageView et les deux TextFields
4. Interface utilisateur Exercice 3 : Image View : image statique (pas besoin de pointeurs) Labels : pas besoin de pointeurs TextFields : pointeurs à déclarer  (nameField et numberField) Slider : un pointeur pour le label et une action pour le slider (sliderLabel et fonction sliderChanged) Segmented Control : pas besoin de pointeurs, une action (fonction toggleControls) Button : pointeur et action (doSomethingButton et fonction buttonChanged) Switches : un pointeur pour chaque et une action (leftSwitch et rightSwitch)
4. Interface utilisateur Cacher le clavier lorsque la touche Done est enfoncée Evénement lié : Did End On Exit .h .m FirstResponder : c’est le contrôle pour lequel l’utilisateur est en train de interagir avec
4. Interface utilisateur Cacher le clavier lorsqu’on touche l’arrière plan .h .m
4. Interface utilisateur Cacher le clavier lorsqu’on touche l’arrière plan Pour que la vue soit capable de capturer les actions, elle doit faire partie de la classe UIControl Evénement lié : Touch Down
4. Interface utilisateur Valeurs minimum et maximum du slider Paramètres du Slider : Valeur initiale Propriétés habituelles Images du début et de la fin
4. Interface utilisateur Exercice 3 (suite) : Implémenter le Slider
4. Interface utilisateur Implémentation du Slider .h .m
4. Interface utilisateur Exercice 3 (suite) : Implémenter le SegmentedControl ainsi que les Switches
4. Interface utilisateur Implémentation du Switch et du Segmented Control .h
4. Interface utilisateur Implémentation du Switches, des Buttons et du Segmented Control .m Permet de cacher les boutons ou les switches en fonction de la valeur du segmentedControl
4. Interface utilisateur Exercice 3 (suite) : Implémenter le Button «Do Something»  UIActionSheet UIAlertView
4. Interface utilisateur Implémentation de l’ActionSheet .h .m Déclaration du protocole
4. Interface utilisateur .m Implémentation de l’AlertView Méthode déléguée Créer une alerte L’AlerteView possède aussi des méthodes déléguées (Il faut donc les déclarer en protocole dans le .h) mais ici, on ne s’en sert pas donc pas de déclaration
4. Interface utilisateur viewDidLoad et viewDidUnload viewDidLoad : Permet d’initialiser la vue, les variables, fonctions ... lorsqu’elle se charge viewDidUnload : permet d’éviter de surcharger la mémoire. Lorsque vous spécifiez des pointeurs dans le contrôleur, ces derniers sont retenus (Retain) et lorsque la vue est libérée, il faut donc libérer ces pointeurs dans viewDidUnload. Lorsque le fichier nib sera rechargé, Cocoa connectera automatiquement les pointeurs.
5. Rotation et dimensionnement
5. Rotation et dimensionnement Taille de l’écran : 320 pixels x 460 pixels (ou 480 s’il n’y a pas de barre de statut)  Trois approches pour la rotation : Dimensionnement automatique : rapide et simple mais pas approprié pour des applications complexes Positionnement manuel lors de la rotation Créer deux versions de la vue (Portrait et paysage)
5. Rotation et dimensionnement Autosizing : Pour autoriser n’importe quel sens d’orientation :
5. Rotation et dimensionnement Redimensionnement : Examiner l’ exemple fournit en annexe : «05 Autosize 1»
5. Rotation et dimensionnement Redimensionnement manuel : Examiner l’exemple fournit en annexe : «05 Autosize 2»
5. Rotation et dimensionnement Création de deux vues : Examiner l’exemple fournit en annexe : «05 Swap»
6. Applications à vues multiples
6. Applications à vues multiples Navigation Bar Tab Bar et Navigation Bar Classe : UINavigationController Classe : UITabBarController
6. Applications à vues multiples Exercice 4  : Création du projet Créer un projet «View Switcher» Choisir «Window-based Application» (Contient uniquement une Window et une application delegate)  On créé un «Root Controller» qui va coordonner l’affichage des deux vues
6. Applications à vues multiples Exercice 4  : Création des contrôleurs Ajouter au projet le template «UIViewController subclass» Nommez le «SwitchViewController.m» Faire de même en créant : «BlueViewController.m» et «YellowViewController.m»
6. Applications à vues multiples Exercice 4  : Création des vues Ajouter au projet deux templates «View XIB» Ils correspondent à deux fichiers «nib» qui représentent nos deux vues Nommez les «BlueView.xib» et «YellowView.xib»
6. Applications à vues multiples Exercice 4  : Modification de l’App Delegate View_SwitcherAppDelegate.h Déclaration d’un pointeur sur notre «root controller» car il sera intégré à l’application lorsqu’elle sera lancée
6. Applications à vues multiples Exercice 4  : Modification de l’App Delegate View_SwitcherAppDelegate.m
6. Applications à vues multiples Exercice 4  : SwitchViewController.h Déclaration des pointeurs et des actions dont nous aurons besoin Pointeurs sur les deux classes sur lesquelles on va switcher Action pour switcher les vues (Appelée lorsque le bouton sera enfoncé)
6. Applications à vues multiples Exercice 4  : Modification de MainWindow.xib Ajout d’une instance de SwitchViewController dans le MainWindow.xib Changer la classe de l’objet en  SwitchViewController Construire l’interface (Toolbar) et connecter le bouton à l’action «switchViews»
6. Applications à vues multiples Exercice 4  : Implémentation de SwitchViewController.m Allocation de la vue bleue On l’insère dans le contrôleur On alloue la vue jaune Si le contrôleur jaune existe mais sa vue n’est pas au premier plan ou si le contrôleur n’a pas encore été instancié On retire la vue bleue et on la remplace par la vue jaune Si la vue jaune n’est pas allouée
6. Applications à vues multiples Exercice 4  : Implémentation de SwitchViewController.m On alloue la vue bleue Sinon le contrôle bleu existe mais sa vue n’est pas au premier plan ou si le contrôleur n’a pas été instancié On retire la vue jaune et on la remplace par la vue bleue Si la vue bleue n’est pas allouée Ne pas oublier de désallouer
6. Applications à vues multiples Exercice 4  : Implémentation des alertes Implémenter les alertes (UIAlertView) dans chacune des deux vues
6. Applications à vues multiples Exercice 4  : Appliquer une transition ... ... Timming de transition Durée Déclaration Type de transition A utiliser si on a surchargé ces méthodes dans les contrôleurs A utiliser si on surcharge  ces méthodes dans les contrôleurs Permet d’enregistrer les animations et de lancer les transitions
7. Tab Bars et Pickers
7. Tab Bars et Pickers Exercice 5  : Création du projet Créer un projet «Pickers» Choisir «Window-based Application» (Contient uniquement une Window et une application delegate)  On créé 4 «Root Controller» :  DatePickerViewController.h, SingleComponentPickerViewController.m, DoubleComponentPickerViewController.m, DependentComponentPickerViewController.m
7. Tab Bars et Pickers Exercice 5  : Ajout du Root View Controller .h .m
7. Tab Bars et Pickers Exercice 5  : Ajout du Root View Controller Icônes de la Tab Bar : 24 x 24 pixels, fond transparent, format .png Ouvrir «MainWindow.xib», ajouter une «Tab Bar Controller» Ajouter 4 items qui correspondent à nos 4 vues Associer chaque Table View Controller avec le fichier nib correspondant
7. Tab Bars et Pickers Exercice 5  : Ajout du Root View Controller Changer la classe en «DatePickerViewController» dans «Identity Inspector» Répéter la procédure pour les 4 autres items Control Drag de «Pickers App Delegate» au «Tab Bar Controller» et connecter le pointeur «rootController» Icône rouge pour afficher des infos Appliquer un style prédéfini à l’item Customiser l’apparence de l’item
7. Tab Bars et Pickers Exercice 5  : Implémentation de Date Picker Ajouter un pointeur (Pour récupérer la date sélectionnée) :  datePicker Ajouter une action (Pour afficher une «AlertView» avec la date sélectionnée) buttonPressed Ouvrir DatePickerViewController.xib Redimensionner la fenêtre en spécifiant dans «BottomBar», Tab Bar Ajouter à partir de la librairie un DatePicker et un bouton
7. Tab Bars et Pickers Exercice 5  : Implémentation de Date Picker
7. Tab Bars et Pickers Exercice 5  : Single Compenent Picker Ajouter un pointeur (Pour récupérer le choix sélectionnée) :  singlePicker Ajouter une action (Pour afficher une «AlertView»)  buttonPressed Inclure les protocoles  UIPickerViewDelegate  et  UIPickerViewDataSource .h Ouvrir SingleCompenentPickerViewController.xib Redimensionner la fenêtre en spécifiant dans «BottomBar», Tab Bar Ajouter à partir de la librairie un PickerView et un bouton et les relier aux pointeurs et actions correspondants (ne pas oublier de relier Delegate et DataSource)
7. Tab Bars et Pickers Exercice 5  : Single Compenent Picker Initialisation d’un array
7. Tab Bars et Pickers Exercice 5  : Single Compenent Picker Instructions pour le compilateur Fournir au Picker, la valeur à mettre dans un champ donné pour un composant donné
7. Tab Bars et Pickers Exercice 5  : Multicompenent Picker Ajouter un pointeur (Pour récupérer le choix sélectionnée) :  doublePicker Ajouter une action (Pour afficher une «AlertView»)  buttonPressed Ajouter deux Array et inclure les protocoles  UIPickerViewDelegate  et  UIPickerViewDataSource .h Ouvrir SingleCompenentPickerViewController.xib et créer l’interface
7. Tab Bars et Pickers Exercice 5  : Multicompenent Picker
7. Tab Bars et Pickers Exercice 5  : Multicompenent Picker
7. Tab Bars et Pickers NSDictionary et NSArray
7. Tab Bars et Pickers Exercice 5  : Depedent Components Ajouter un pointeur (Pour récupérer le choix sélectionnée) :  picker Ajouter une action (Pour afficher une «AlertView»)  buttonPressed Ajouter deux Array, un Dictionary et inclure les protocoles  UIPickerViewDelegate  et  UIPickerViewDataSource .h Ouvrir DependentCompenentPickerViewController.xib et créer l’interface
7. Tab Bars et Pickers Exercice 5  : Depedent Components
7. Tab Bars et Pickers Exercice 5  : Depedent Components Permet de récupérer les ressources que l’on a importé dans le projet Permet de récupérer toutes les clés du dictionnaire Permet de trier par ordre alphabétique l’array
7. Tab Bars et Pickers Exercice 5  : Depedent Components
8. Table Views
8. Table Views Principe des vues sous forme de listes Une seule colonne par vue, lignes facilement modifiables Chaque ligne peut contenir des sous-vues Stockage uniquement des lignes visibles à l’écran UITableViewDataSource et UITableViewDelegate
8. Table Views Styles des Table Views Grouped table Plain table sans index Plain table avec index
8. Table Views Les sections dans une Table Views
8. Table Views Exercice 6 : Une simple Table View Créer un projet «Simple Table» Placer une Table View sur la vue Connecter les DataSource et Delegate avec File’s Owner Implémenter le Simple_TableViewController (Ajouter les protocoles ainsi que un array qui contiendra les données)
8. Table Views Exercice 6 : Une simple Table View Nombre de lignes par sections Pour afficher une ligne donnée indexPath contient la section et la ligne Pour créer une cellule en réutilisant l’id défini précédemment Identifiant unique d’une cellule Si la tableView ne possède pas de cellule partagée On retourne la cellule
8. Table Views Exercice 6 : Ajout d’une image dans chaque ligne propriété imageView
8. Table Views Style des lignes ■  Image: permet d’afficher une image à gauche de la ligne ■  Text Label: correspondant au texte principal de la ligne ■  Detail Text Label: permet d’ajouter une note, un label à ligne en dessous du texte principal Indentation des lignes
8. Table Views Sélection d’une ligne ■  Avant de sélectionner une ligne ■  Après sélection d’une ligne
8. Table Views Taille d’une ligne Taille du texte
8. Table Views Exercice 7 : Créer ses propres cellules, exemple 1 Créer un projet «Cell» Placer une Table View sur la vue Connecter les DataSource et Delegate avec File’s Owner
8. Table Views Exercice 7 : Créer ses propres cellules, exemple 1 Déclaration de nos sources de données
8. Table Views Exercice 7 : Créer ses propres cellules, exemple 1 Création manuelle de la cellule : ajout du label «Name»
8. Table Views Exercice 7 : Créer ses propres cellules, exemple 1 Création manuelle de la cellule : ajout du label «Color» Création manuelle de la cellule : ajout du label «nameValue» Création manuelle de la cellule : ajout du label «colorValue»
8. Table Views Exercice 7 : Créer ses propres cellules, exemple 1 Ajout les valeurs aux deux champs
8. Table Views Exercice 8 : Création de CustomCell.h, exemple 2  Ajouter au projet, un UITableViewCell Ouvrir CustomCell.xib Ajouter une «Table View Cell» à partir de la librairie Changer la classe de UITableViewCell en CustomCell Changer la taille de la cellule en 65 pixels
8. Table Views Exercice 8 : Création de CustomCell.h, exemple 2  Double clic sur l’icône CustomCell Déposer l’objet «View» sur cette vue Changer la taille de la vue : x = 0, y = 0, w = 320 et h = 65 Déposer 4 labels sur la vue et relier les pointeurs sur ces labels
8. Table Views Exercice 8 : Création de CustomCell.h, exemple 2  Effectuer les changements suivants Création de la cellule à partir du nib Obtenir tous les objets du nib
8. Table Views Exercice 8 : Création de CustomCell.h, exemple 2  Effectuer les changements suivants Pour spécifier que l’on a changé la taille de la cellule .h
8. Table Views Exercice 9 :  Etudier l’exemple de projet intitulé « 08 Section 1» et « 08 Section 2 »
8. Table Views Points importants Ajouter un index Implémentation d’un barre de recherche Principe Créer un dictionnaire immutable qui contient tout les données ainsi qu’un dictionnaire mutable qui contiendra tous les résultats lors d’une recherche Problème : mutableCopy ne copie pas en profondeur les array et copie uniquement les références Solution : Créer soit meme une fonction qui copie en profondeur
8. Table Views Implémentation d’un barre de recherche Deep Mutable Copy .h .m Parcours du dictionnaire original On essaye de copier l’objet via mutable deep copy Si l’objet ne répond pas au message, on tente une mutable copy Si l’objet ne répond pas au message, on tente une simple copie
9. Navigation Controllers
9. Navigation Controllers Etude de l’exemple  « 09  Nav» Mise en place de Navigation Controller
10. Paramètres de l’application
10. Paramètres d’une application Exercice 10 : Utility Application Créer un projet «AppSettings»
10. Paramètres d’une application Exercice 10 : Settings Bundle Property list nommée ‘Root.plist» permet de spécifier les paramètres de l’application. Ce fichier suit une structure très précise Ajouter un «Settings Bundle» au projet : «Settings» Analyse du fichier Root.plist
10. Paramètres d’une application Analyse du fichier Root.plist
10. Paramètres d’une application Analyse du fichier Root.plist
10. Paramètres d’une application Lecture des paramètres dans l’application Classe NSUserDefaults
10. Paramètres d’une application Ecriture des paramètres dans l’application
11. Persistance des données
11. Persistance des données 3 possibilités pour sauvegarder des données Proporty List Archive Object SQLite 3 Core Data Créer un chemin d’un fichier Récupérer le dossier de stockage des documents sur l’iPhone Accès au dossier tmp
11. Persistance des données Méthode 1 :  Property List Liste des objets pouvant être sauvegardé dans un fichier «plist» Méthode Inconvénient  :  Les autres objets ne peuvent pas être sauvegardés
11. Persistance des données Méthode 1 :  Property List Lecture des données Ecriture des données
11. Persistance des données Méthode 2 :  Archiver les objets Protocole NSCoding possède deux méthodes obligatoires pour archiver Avant de pouvoir sauvegarder une archive, il faut que la classe soit conforme à NSCoding et NSCopying Encoder Décoder Si on surclasse une classe qui ne conforme pas à NSCoding
11. Persistance des données Méthode 2 :  Archiver les objets Protocole NSCoding possède deux méthodes obligatoires pour archiver Décoder Si on surclasse d’autre classes qui ne conforme pas NSCoding NSCopying On crée une nouvelle instance de notre classe et ensuite on assigne les mêmes valeurs aux propriétés Pointeur sur une structure pour la gestion mémoire (Peut important)
11. Persistance des données Méthode 2 :  Archiver les objets Persistance du «Data Object» Archiver les objets dans un NSMutableData Contiendra l’objet encodé Création d’une clé pour encoder n’importe quel objet dans l’archive Désallocation On prévient l’archive que l’on a fini d’encoder nos objets On enregistre l’archive
11. Persistance des données Méthode 2 :  Archiver les objets Persistance du «Data Object» Décoder l’archive Contiendra l’objet décodé Lecture des objets désarchivés avec la clé définie précédemment Désallocation Explorer l’exemple «11 Persistence Archiving»
11. Persistance des données Méthode 3 :  SQLite 3 Ouverture de la base de données Importer le frameworks «libsqlite3.dylib» Fermer la base de données Créer une table
11. Persistance des données Méthode 3 :  SQLite 3 Effectuer des requêtes
11. Persistance des données Méthode 3 :  SQLite 3 Bind Variables pour insérer des champs Explorer l’exemple «11 Persistence SQLite»
11. Persistance des données Méthode 4 :  Core Data Classes permettant de gérer facilement la persistance des données Principe de Core Data basé sur la description des données Pour se faire : création d’entités et d’attributs (un peu comme en UML)  1. Déclaration de l’entité 2. Déclaration d’un attributs 3. Modification des propriétés  de l’attribut
11. Persistance des données Méthode 4 :  Core Data Etablir des relations entre les entités Explorer l’exemple «11 Core Data Persistence»
12. Dessiner avec Quartz
12. Dessiner avec Quartz Quartz Classe UIView, fonction drawRect Le dessin s’effectue avec un context. Chaque vue à un contexte associé Fonctions de dessin Couleurs StrokeColor : pour la couleur d’une ligne et le contour d’une forme FillColor : pour la couleur interne d’une forme
12. Dessiner avec Quartz Explorer le projet «QuartzDemo»

Contenu connexe

PDF
Chap XIII : calcul scientifique avec python
PDF
Algorithmique_et_programmation_part2
PPTX
Python après 15 ans de JAVA
PDF
Chap XIV : Calcul parallèle (Fondements & Principe d'utilisation)
PDF
Algorithmique_et_programmation_part3_V2
PPTX
Formation python
PDF
Td pascal tdD
PDF
TP4 Atelier C++ /GL2 INSAT / Tunisie
Chap XIII : calcul scientifique avec python
Algorithmique_et_programmation_part2
Python après 15 ans de JAVA
Chap XIV : Calcul parallèle (Fondements & Principe d'utilisation)
Algorithmique_et_programmation_part3_V2
Formation python
Td pascal tdD
TP4 Atelier C++ /GL2 INSAT / Tunisie

Tendances (19)

PDF
Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...
PDF
Python avancé : Ensemble, dictionnaire et base de données
PDF
Chap1 Introduction à python
PPTX
Introduction à l'objet - Deuxième année ISIMA
PPTX
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
PPTX
Comment développer un serveur métier en python/C++
PDF
Outils de gestion de projets
PDF
Outils de construction pour la recherche
ODT
Interception de signal avec dump de la pile d'appel
PDF
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
PDF
Tp1 design patternappliques
PDF
Présentation générale de l'Orfeo ToolBox (12.2014)
 
PDF
Type abstrait de données
PDF
Chap3 programmation modulaire en python
PDF
Algo vol.2 sujets
PDF
Qualité de code et bonnes pratiques
PPT
Cours Visual Basic.NET
PPTX
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
PPTX
C++ 11 - Tech Days 2014 in Paris
Du Polymorphisme dynamique au polymorphisme statique : Abstraction sans perte...
Python avancé : Ensemble, dictionnaire et base de données
Chap1 Introduction à python
Introduction à l'objet - Deuxième année ISIMA
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Comment développer un serveur métier en python/C++
Outils de gestion de projets
Outils de construction pour la recherche
Interception de signal avec dump de la pile d'appel
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Tp1 design patternappliques
Présentation générale de l'Orfeo ToolBox (12.2014)
 
Type abstrait de données
Chap3 programmation modulaire en python
Algo vol.2 sujets
Qualité de code et bonnes pratiques
Cours Visual Basic.NET
Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
C++ 11 - Tech Days 2014 in Paris
Publicité

En vedette (20)

PDF
La fin de la propriété intellectuelle?
PDF
Paradis Chez Soi
PPT
Twitter : présentation complète de l'essentiel
PDF
Metier informatique
PPTX
Publications scientifiques en sciences humaines et sociales à l'ère du numéri...
DOCX
Nouveau microsoft word document
PDF
Brochure Meca-19102016-bd
PPT
Protection des métaux contre la corrosion
PPT
TRANSITION METALS
PPTX
Les dates importantes de l’histoire de l’algérie
PPTX
L'impact du Web social sur votre avenir
PDF
Fibrovia® - La fibre de la longévité
PDF
Microvia® - Une référence pour l'adhérence
PPT
Livre numérique, presse numérique (Biblioquest 2013)
PDF
Présentation de la plate-forme d'éco-conception CORINE
PDF
L’oxydation
PPSX
Animation obtention, conversion et séparation des aromatiques
PDF
SRDT Normandie
DOC
Baroffio y karsa
PDF
Exo alcool 2
La fin de la propriété intellectuelle?
Paradis Chez Soi
Twitter : présentation complète de l'essentiel
Metier informatique
Publications scientifiques en sciences humaines et sociales à l'ère du numéri...
Nouveau microsoft word document
Brochure Meca-19102016-bd
Protection des métaux contre la corrosion
TRANSITION METALS
Les dates importantes de l’histoire de l’algérie
L'impact du Web social sur votre avenir
Fibrovia® - La fibre de la longévité
Microvia® - Une référence pour l'adhérence
Livre numérique, presse numérique (Biblioquest 2013)
Présentation de la plate-forme d'éco-conception CORINE
L’oxydation
Animation obtention, conversion et séparation des aromatiques
SRDT Normandie
Baroffio y karsa
Exo alcool 2
Publicité

Similaire à Formation iPhone ENSI by (Orange Tunisie) (20)

PDF
5.ateliers avancés
PDF
Chapitre3_Angular_part1 ANGULAR ISTIC SI.pdf
PDF
Web-In 2010: Programmation Native iOS (French)
PPT
Programmation Evenementielle 1 object.ppt
PDF
Les ateliers android_1_vers2015
PDF
Les ateliers android_1_vers2015
PDF
Les ateliers android_1_vers2015
PDF
Android-Tp3: fragments et menus
PDF
Android-Tp1: éléments graphiques de base et intents
PDF
TP_1.pdf
PPT
Ch5. APIs HTML5.pptjsytigfgfvnb gfvbghbvghbv
PDF
PDF
cours développement mobiles hamza_drid_2020
PPTX
Introduction au développement Android
PDF
chapitre-1-introduction-a-la-programmation-evenementielle.pdf
PDF
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
PDF
Tuto bada
PPTX
Mise en place de l'ActionBarCompat dans vos projets Android.
PDF
Les Activités.pdf
PPTX
DART.pptx
5.ateliers avancés
Chapitre3_Angular_part1 ANGULAR ISTIC SI.pdf
Web-In 2010: Programmation Native iOS (French)
Programmation Evenementielle 1 object.ppt
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015
Les ateliers android_1_vers2015
Android-Tp3: fragments et menus
Android-Tp1: éléments graphiques de base et intents
TP_1.pdf
Ch5. APIs HTML5.pptjsytigfgfvnb gfvbghbvghbv
cours développement mobiles hamza_drid_2020
Introduction au développement Android
chapitre-1-introduction-a-la-programmation-evenementielle.pdf
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
Tuto bada
Mise en place de l'ActionBarCompat dans vos projets Android.
Les Activités.pdf
DART.pptx

Dernier (20)

PPTX
Devenir Inspecteur HSE _ Chp1_ L1....pptx
PPTX
XEROPHTALMIE , SES ETIOLOGIES ET SA PRISE EN CHARGE
PDF
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️ Exemples rédigés - 🌿 SVT - Extrait
PDF
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️Exemples rédigés - Spécialité: 💻 NSI -...
PPTX
SESSION5-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
PPTX
Le rendez-vous de l'été.pptx Film français
PDF
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️ Exemples rédigés - Physique ⚡ - Chimi...
PPTX
Leçon inaugurale2.ministere. enseignant.
PPTX
requiredkjshajhsaalksasjashaaisj kajshakha
PDF
CLASE 2 TRAIN voacublaire en rancaise.pdf
PPTX
Presentation_carte_arduino_uno_1_Entree_Sortie_numerique.pptx
PPTX
SESSION1-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
PDF
Leadership,_Pitch_et_Marketing_–_Préparer_son_accès_au_marché.pdf
PDF
Articles definis et indefinis. Comment les différencier ?
PDF
🎓 Le Secret des Profs Captivants - 💡 2. Hygiène vocale et santé professionnel...
PPT
le-subjonctif-présent, Grammaire, français
PDF
Consignes générales sécurité et environnement.pdf
PPT
calcul---électrique--et--chutes de tension.ppt
PPTX
Présentation Projet Entreprise Minimaliste Moderne Sobre Blanc Noir.pptx
PDF
585-developpement-d-une-application-avec-python-fr-en-business.pdf
Devenir Inspecteur HSE _ Chp1_ L1....pptx
XEROPHTALMIE , SES ETIOLOGIES ET SA PRISE EN CHARGE
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️ Exemples rédigés - 🌿 SVT - Extrait
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️Exemples rédigés - Spécialité: 💻 NSI -...
SESSION5-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
Le rendez-vous de l'été.pptx Film français
Bac 2026 - Livre - 🎤 Le Grand Oral - ✍️ Exemples rédigés - Physique ⚡ - Chimi...
Leçon inaugurale2.ministere. enseignant.
requiredkjshajhsaalksasjashaaisj kajshakha
CLASE 2 TRAIN voacublaire en rancaise.pdf
Presentation_carte_arduino_uno_1_Entree_Sortie_numerique.pptx
SESSION1-SUPPORT-DE-COURS-FLEC-(Future leader en énergie au Cameroun)-CECOSDA...
Leadership,_Pitch_et_Marketing_–_Préparer_son_accès_au_marché.pdf
Articles definis et indefinis. Comment les différencier ?
🎓 Le Secret des Profs Captivants - 💡 2. Hygiène vocale et santé professionnel...
le-subjonctif-présent, Grammaire, français
Consignes générales sécurité et environnement.pdf
calcul---électrique--et--chutes de tension.ppt
Présentation Projet Entreprise Minimaliste Moderne Sobre Blanc Noir.pptx
585-developpement-d-une-application-avec-python-fr-en-business.pdf

Formation iPhone ENSI by (Orange Tunisie)

  • 1. SDK iPhone Programme de formation
  • 2. Présentation Lancé en mars 2008 Compatible avec Mac OS X Langage : Cocoa Environnement de développement : Xcode et Interface Builder Développement pour iPhone et iPod Touch 100 000 applications disponibles 3 milliards de téléchargements (21 milliards en 2013) 75% des applications sont gratuites
  • 3. Plan de formation 1. Introduction 2. Création d’un projet 3. Programmation 4. Interface utilisateur 5. Rotation et dimensionnement 6. Applications à vues multiples 7. Tab Bars et Pickers 8. Table Views
  • 4. Plan de formation 9. Navigation Controllers 10.Paramètres de l’application 11. Persistance des données 12. Dessiner avec Quartz 13. Interaction de l’utilisateur 14. Utilisation de la caméra et de l’album photo 15. Publication sur l’AppStore
  • 6. 1. Introduction Ouvrir un compte Apple http://developer.apple.com/iphone/ SDK version 3.1.2 Téléchargement du SDK
  • 7. 1. Introduction Uniquement une application en exécution Uniquement une fenêtre à la fois Accès limité au workspace de l’application Temps de réponse limité Ecran limité Ressources systèmes limitées Pas de souris ni de clavier physique Caractéristiques d’une application
  • 8. 1. Introduction Programmation Cocoa Objets Objective-C NSString NSNumber NSArray NSMutableArray NSDictionary NSMutableDictionary NSDate int BOOL Envoyer des messages aux objets Autres langages : alert.show(); En Objective-C : [alert show];
  • 9. 1. Introduction Programmation Cocoa Envoyer des messages aux objets avec des paramètres Autres langages : alert.show("A Funny Message", 3); En Objective-C : [alert show:@"I say this!" thisManyTimes:3]; Instancier des objets myClass *myObject = [[myClass alloc] init]; Libération des objets [myObject release];
  • 10. 1. Introduction Programmation Cocoa Pattern de l’utilisation des objets Management de la mémoire Management manuel de la mémoire avec le «Comptage des références» Le système garde en mémoire les objets dont leur référence est différente à 0. Chaque composant qui nécessite d’utiliser un objet augmente sa référence de 1. myClass *myObject = [[myClass alloc] init]; ... [myObject doStuff]; ... [myObject release];
  • 11. 1. Introduction Programmation Cocoa Classe NSString NSString *lotsOfInsertedStuffString = [NSString stringWithFormat:@"I am adding this number: %i and this string:%@.", 45, myString]; NSLog(lotsOfInsertedStuffString); NSString *myString = [[NSString alloc] initWithString:@"A String"]; NSLog(myString); [myString release]; Ou NSString *myString = @"A String"; NSLog(myString);
  • 12. 1. Introduction Programmation Cocoa Classe NSNumber On peut utiliser de la classe NSNumber ou les types en C : int i = 3; NSLog(@"i = %i", i); double d = 3.4; NSLog(@"d = %f", d); double dPlusi = d + i; NSLog(@"d + i = %f", dPlusi);
  • 13. 1. Introduction Programmation Cocoa Classe NSArray NSMutableArray *myArray = [[NSMutableArray alloc] init]; [myArray addObject:@"Element 1"]; [myArray addObject:@"Element 2"]; NSLog([myArray objectAtIndex:0]); NSLog([myArray lastObject]); for (NSString *s in myArray) { NSLog(s); } [myArray release];
  • 16. 2. Création d’un projet Xcode
  • 17. 2. Création d’un projet Application Delegate Il s’agit de la classe en charge du lancement de l’application et de l’affichage de la fenêtre principale. Vous pouvez vous en servir pour initialiser des éléments particuliers communs à l’ensemble des éléments de votre application : connexion à une base de données, configuration générale, Cette classe est obligatoire pour toute application IPhone, elle se conforme au protocole UIApplicationDelegate et implémente la méthode -(void)applicationDidFinishLaunching... Cette méthode est appelée directement après le lancement de l'application.
  • 18. 2. Création d’un projet Frameworks Comme son nom l'indique, cette partie contient les "includes" des Frameworks utilisés dans le projet. Par défaut, vous avez les 3 principaux: UIKit, Foundation et CoreGraphics. Products Contient le fichier généré par la compilation, à savoir l’application
  • 19. 2. Création d’un projet File’s Owner : instance de l’objet qui a chargé le fichier nib (NeXT Interface Builder) du disque First Responder : objet avec lequel l’utilisateur intéragit Autres objets : Instances d’objets qui seront créés lorsque le fichier nib se chargera Interface Builder
  • 20. 2. Création d’un projet MainWindow.xib Ce fichier permet de créer les instances de «Application Delegate», de la fenêtre principale et du «View Controller» lors de la compilation Instance de Button_FunAppDelegate Instance de Button_FunViewController Fenêtre unique de l’application
  • 21. 2. Création d’un projet Image .png obligatoire et de taille de 57 x 57 pixels Importer l’image dans le projet Spécifier dans les paramètres de l’application («mon_prj-Info.plist») une icône Ajout d’une icône à l’application
  • 22. 2. Création d’un projet Exercice 1 : Créer un projet Hello World Placer un label «Hello World» sur la vue Changer ses attributs (Taille, couleur ...) Ajouter une icône à l’application Compiler
  • 24. 3. Programmation Architecture et méthode de conception qui organise l’interface homme-machine (IHM) Division de l’IHM en : Un modèle (Modèle de données) Une vue (Présentation, interface) Un contrôleur (Logique de contrôle, gestion des évènements, synchronisation) Concept du «Modèle-Vue-Contrôleur» Lorsqu'un client envoie une requête à l'application : la requête est analysée par le contrôleur le contrôleur demande au modèle approprié d’effectuer les traitements le contrôleur renvoie la vue adaptée
  • 25. 3. Programmation Exercice 2 : Créer un projet Button Fun Ajouter deux boutons et un label
  • 26. 3. Programmation Classe Controller.h Sous classe de UIViewController
  • 27. 3. Programmation Les pointeurs Déclaration : Les fonctions Déclaration : Eviter de devoir définir les accesseurs et les mutateurs Options de création des accesseurs et mutateurs par le compilateur Les accesseurs Identiques
  • 28. 3. Programmation Les types de données : NSString NSNumber NSArray NSMutableArray NSDictionary NSMutableDictionary NSDate int BOOL Exemple : .h : NSNumber * my_number ; @property ( nonatomic , retain ) NSNumber * my_number ; .m : @synthesize my_number;
  • 29. 3. Programmation Classe Controller.m
  • 30. 3. Programmation Classe Controller.m
  • 31. 3. Programmation Exercice 2 (suite) : Déclarer un pointeur «statusText» sur le label Déclarer une fonction «buttonPressed»
  • 32. 3. Programmation Exercice 2 : Correction .h .m Création des accesseurs et mutateurs Implémentation de la fonction
  • 33. 3. Programmation Exercice 2 : Correction .m Concernant l’allocation ... ou ...
  • 34. 3. Programmation Connecter des pointeurs 1. Relier le File’s Owner au Label pour créer la connexion 2. Choisir le pointeur
  • 35. 3. Programmation Spécifier les actions 1. Choisir l’action 2. Choisir l’évènement et glisser à partir du cercle à droite jusqu’au File’s Owner 3. Sélectionner dans la pop-up la méthode à exécuter
  • 36. 3. Programmation Exercice 2 (suite) : Relier les pointeurs avec les objets présents dans Interface Builder Tester l’application
  • 38. 4. Interface utilisateur Liste des contrôles disponibles dans IB : Image View Text Field Slider Segmented Control Button Label Switch Les contrôles peuvent être du type : Actif (Button ...) Statique (Label ...) Passif (Text Field ...)
  • 39. 4. Interface utilisateur Liste des images disponibles Paramètres de Image View : Permet de définir comment l’image se trouve par rapport à la vue dans laquelle elle se situe Appliquer un effet de transparence à l’image Pas d’impact sur une image Assigner un identifiant à cette image Permet de modifier la manière dont l’image est dessinée Permet à l’utilisateur d’effectuer des interactions Permet de recevoir plusieurs évènement de multi touche
  • 40. 4. Interface utilisateur Valeur par défaut Paramètres de Text Field : Afficher une légende dans le champs Alignement Modifier l’apparence Type de valeurs possibles dans un Text Field Attributs hérités de UIControl (Peu sont utiles à ce contrôle)
  • 41. 4. Interface utilisateur Exercice 3 : Créer un projet «Control Fun» Créer l’interface comme celle présentée à droite Déterminer le nombre de pointeurs nécessaires Déterminer le nombre d’actions nécessaires Implémenter l’ImageView et les deux TextFields
  • 42. 4. Interface utilisateur Exercice 3 : Image View : image statique (pas besoin de pointeurs) Labels : pas besoin de pointeurs TextFields : pointeurs à déclarer (nameField et numberField) Slider : un pointeur pour le label et une action pour le slider (sliderLabel et fonction sliderChanged) Segmented Control : pas besoin de pointeurs, une action (fonction toggleControls) Button : pointeur et action (doSomethingButton et fonction buttonChanged) Switches : un pointeur pour chaque et une action (leftSwitch et rightSwitch)
  • 43. 4. Interface utilisateur Cacher le clavier lorsque la touche Done est enfoncée Evénement lié : Did End On Exit .h .m FirstResponder : c’est le contrôle pour lequel l’utilisateur est en train de interagir avec
  • 44. 4. Interface utilisateur Cacher le clavier lorsqu’on touche l’arrière plan .h .m
  • 45. 4. Interface utilisateur Cacher le clavier lorsqu’on touche l’arrière plan Pour que la vue soit capable de capturer les actions, elle doit faire partie de la classe UIControl Evénement lié : Touch Down
  • 46. 4. Interface utilisateur Valeurs minimum et maximum du slider Paramètres du Slider : Valeur initiale Propriétés habituelles Images du début et de la fin
  • 47. 4. Interface utilisateur Exercice 3 (suite) : Implémenter le Slider
  • 48. 4. Interface utilisateur Implémentation du Slider .h .m
  • 49. 4. Interface utilisateur Exercice 3 (suite) : Implémenter le SegmentedControl ainsi que les Switches
  • 50. 4. Interface utilisateur Implémentation du Switch et du Segmented Control .h
  • 51. 4. Interface utilisateur Implémentation du Switches, des Buttons et du Segmented Control .m Permet de cacher les boutons ou les switches en fonction de la valeur du segmentedControl
  • 52. 4. Interface utilisateur Exercice 3 (suite) : Implémenter le Button «Do Something» UIActionSheet UIAlertView
  • 53. 4. Interface utilisateur Implémentation de l’ActionSheet .h .m Déclaration du protocole
  • 54. 4. Interface utilisateur .m Implémentation de l’AlertView Méthode déléguée Créer une alerte L’AlerteView possède aussi des méthodes déléguées (Il faut donc les déclarer en protocole dans le .h) mais ici, on ne s’en sert pas donc pas de déclaration
  • 55. 4. Interface utilisateur viewDidLoad et viewDidUnload viewDidLoad : Permet d’initialiser la vue, les variables, fonctions ... lorsqu’elle se charge viewDidUnload : permet d’éviter de surcharger la mémoire. Lorsque vous spécifiez des pointeurs dans le contrôleur, ces derniers sont retenus (Retain) et lorsque la vue est libérée, il faut donc libérer ces pointeurs dans viewDidUnload. Lorsque le fichier nib sera rechargé, Cocoa connectera automatiquement les pointeurs.
  • 56. 5. Rotation et dimensionnement
  • 57. 5. Rotation et dimensionnement Taille de l’écran : 320 pixels x 460 pixels (ou 480 s’il n’y a pas de barre de statut) Trois approches pour la rotation : Dimensionnement automatique : rapide et simple mais pas approprié pour des applications complexes Positionnement manuel lors de la rotation Créer deux versions de la vue (Portrait et paysage)
  • 58. 5. Rotation et dimensionnement Autosizing : Pour autoriser n’importe quel sens d’orientation :
  • 59. 5. Rotation et dimensionnement Redimensionnement : Examiner l’ exemple fournit en annexe : «05 Autosize 1»
  • 60. 5. Rotation et dimensionnement Redimensionnement manuel : Examiner l’exemple fournit en annexe : «05 Autosize 2»
  • 61. 5. Rotation et dimensionnement Création de deux vues : Examiner l’exemple fournit en annexe : «05 Swap»
  • 62. 6. Applications à vues multiples
  • 63. 6. Applications à vues multiples Navigation Bar Tab Bar et Navigation Bar Classe : UINavigationController Classe : UITabBarController
  • 64. 6. Applications à vues multiples Exercice 4 : Création du projet Créer un projet «View Switcher» Choisir «Window-based Application» (Contient uniquement une Window et une application delegate) On créé un «Root Controller» qui va coordonner l’affichage des deux vues
  • 65. 6. Applications à vues multiples Exercice 4 : Création des contrôleurs Ajouter au projet le template «UIViewController subclass» Nommez le «SwitchViewController.m» Faire de même en créant : «BlueViewController.m» et «YellowViewController.m»
  • 66. 6. Applications à vues multiples Exercice 4 : Création des vues Ajouter au projet deux templates «View XIB» Ils correspondent à deux fichiers «nib» qui représentent nos deux vues Nommez les «BlueView.xib» et «YellowView.xib»
  • 67. 6. Applications à vues multiples Exercice 4 : Modification de l’App Delegate View_SwitcherAppDelegate.h Déclaration d’un pointeur sur notre «root controller» car il sera intégré à l’application lorsqu’elle sera lancée
  • 68. 6. Applications à vues multiples Exercice 4 : Modification de l’App Delegate View_SwitcherAppDelegate.m
  • 69. 6. Applications à vues multiples Exercice 4 : SwitchViewController.h Déclaration des pointeurs et des actions dont nous aurons besoin Pointeurs sur les deux classes sur lesquelles on va switcher Action pour switcher les vues (Appelée lorsque le bouton sera enfoncé)
  • 70. 6. Applications à vues multiples Exercice 4 : Modification de MainWindow.xib Ajout d’une instance de SwitchViewController dans le MainWindow.xib Changer la classe de l’objet en SwitchViewController Construire l’interface (Toolbar) et connecter le bouton à l’action «switchViews»
  • 71. 6. Applications à vues multiples Exercice 4 : Implémentation de SwitchViewController.m Allocation de la vue bleue On l’insère dans le contrôleur On alloue la vue jaune Si le contrôleur jaune existe mais sa vue n’est pas au premier plan ou si le contrôleur n’a pas encore été instancié On retire la vue bleue et on la remplace par la vue jaune Si la vue jaune n’est pas allouée
  • 72. 6. Applications à vues multiples Exercice 4 : Implémentation de SwitchViewController.m On alloue la vue bleue Sinon le contrôle bleu existe mais sa vue n’est pas au premier plan ou si le contrôleur n’a pas été instancié On retire la vue jaune et on la remplace par la vue bleue Si la vue bleue n’est pas allouée Ne pas oublier de désallouer
  • 73. 6. Applications à vues multiples Exercice 4 : Implémentation des alertes Implémenter les alertes (UIAlertView) dans chacune des deux vues
  • 74. 6. Applications à vues multiples Exercice 4 : Appliquer une transition ... ... Timming de transition Durée Déclaration Type de transition A utiliser si on a surchargé ces méthodes dans les contrôleurs A utiliser si on surcharge ces méthodes dans les contrôleurs Permet d’enregistrer les animations et de lancer les transitions
  • 75. 7. Tab Bars et Pickers
  • 76. 7. Tab Bars et Pickers Exercice 5 : Création du projet Créer un projet «Pickers» Choisir «Window-based Application» (Contient uniquement une Window et une application delegate) On créé 4 «Root Controller» : DatePickerViewController.h, SingleComponentPickerViewController.m, DoubleComponentPickerViewController.m, DependentComponentPickerViewController.m
  • 77. 7. Tab Bars et Pickers Exercice 5 : Ajout du Root View Controller .h .m
  • 78. 7. Tab Bars et Pickers Exercice 5 : Ajout du Root View Controller Icônes de la Tab Bar : 24 x 24 pixels, fond transparent, format .png Ouvrir «MainWindow.xib», ajouter une «Tab Bar Controller» Ajouter 4 items qui correspondent à nos 4 vues Associer chaque Table View Controller avec le fichier nib correspondant
  • 79. 7. Tab Bars et Pickers Exercice 5 : Ajout du Root View Controller Changer la classe en «DatePickerViewController» dans «Identity Inspector» Répéter la procédure pour les 4 autres items Control Drag de «Pickers App Delegate» au «Tab Bar Controller» et connecter le pointeur «rootController» Icône rouge pour afficher des infos Appliquer un style prédéfini à l’item Customiser l’apparence de l’item
  • 80. 7. Tab Bars et Pickers Exercice 5 : Implémentation de Date Picker Ajouter un pointeur (Pour récupérer la date sélectionnée) : datePicker Ajouter une action (Pour afficher une «AlertView» avec la date sélectionnée) buttonPressed Ouvrir DatePickerViewController.xib Redimensionner la fenêtre en spécifiant dans «BottomBar», Tab Bar Ajouter à partir de la librairie un DatePicker et un bouton
  • 81. 7. Tab Bars et Pickers Exercice 5 : Implémentation de Date Picker
  • 82. 7. Tab Bars et Pickers Exercice 5 : Single Compenent Picker Ajouter un pointeur (Pour récupérer le choix sélectionnée) : singlePicker Ajouter une action (Pour afficher une «AlertView») buttonPressed Inclure les protocoles UIPickerViewDelegate et UIPickerViewDataSource .h Ouvrir SingleCompenentPickerViewController.xib Redimensionner la fenêtre en spécifiant dans «BottomBar», Tab Bar Ajouter à partir de la librairie un PickerView et un bouton et les relier aux pointeurs et actions correspondants (ne pas oublier de relier Delegate et DataSource)
  • 83. 7. Tab Bars et Pickers Exercice 5 : Single Compenent Picker Initialisation d’un array
  • 84. 7. Tab Bars et Pickers Exercice 5 : Single Compenent Picker Instructions pour le compilateur Fournir au Picker, la valeur à mettre dans un champ donné pour un composant donné
  • 85. 7. Tab Bars et Pickers Exercice 5 : Multicompenent Picker Ajouter un pointeur (Pour récupérer le choix sélectionnée) : doublePicker Ajouter une action (Pour afficher une «AlertView») buttonPressed Ajouter deux Array et inclure les protocoles UIPickerViewDelegate et UIPickerViewDataSource .h Ouvrir SingleCompenentPickerViewController.xib et créer l’interface
  • 86. 7. Tab Bars et Pickers Exercice 5 : Multicompenent Picker
  • 87. 7. Tab Bars et Pickers Exercice 5 : Multicompenent Picker
  • 88. 7. Tab Bars et Pickers NSDictionary et NSArray
  • 89. 7. Tab Bars et Pickers Exercice 5 : Depedent Components Ajouter un pointeur (Pour récupérer le choix sélectionnée) : picker Ajouter une action (Pour afficher une «AlertView») buttonPressed Ajouter deux Array, un Dictionary et inclure les protocoles UIPickerViewDelegate et UIPickerViewDataSource .h Ouvrir DependentCompenentPickerViewController.xib et créer l’interface
  • 90. 7. Tab Bars et Pickers Exercice 5 : Depedent Components
  • 91. 7. Tab Bars et Pickers Exercice 5 : Depedent Components Permet de récupérer les ressources que l’on a importé dans le projet Permet de récupérer toutes les clés du dictionnaire Permet de trier par ordre alphabétique l’array
  • 92. 7. Tab Bars et Pickers Exercice 5 : Depedent Components
  • 94. 8. Table Views Principe des vues sous forme de listes Une seule colonne par vue, lignes facilement modifiables Chaque ligne peut contenir des sous-vues Stockage uniquement des lignes visibles à l’écran UITableViewDataSource et UITableViewDelegate
  • 95. 8. Table Views Styles des Table Views Grouped table Plain table sans index Plain table avec index
  • 96. 8. Table Views Les sections dans une Table Views
  • 97. 8. Table Views Exercice 6 : Une simple Table View Créer un projet «Simple Table» Placer une Table View sur la vue Connecter les DataSource et Delegate avec File’s Owner Implémenter le Simple_TableViewController (Ajouter les protocoles ainsi que un array qui contiendra les données)
  • 98. 8. Table Views Exercice 6 : Une simple Table View Nombre de lignes par sections Pour afficher une ligne donnée indexPath contient la section et la ligne Pour créer une cellule en réutilisant l’id défini précédemment Identifiant unique d’une cellule Si la tableView ne possède pas de cellule partagée On retourne la cellule
  • 99. 8. Table Views Exercice 6 : Ajout d’une image dans chaque ligne propriété imageView
  • 100. 8. Table Views Style des lignes ■ Image: permet d’afficher une image à gauche de la ligne ■ Text Label: correspondant au texte principal de la ligne ■ Detail Text Label: permet d’ajouter une note, un label à ligne en dessous du texte principal Indentation des lignes
  • 101. 8. Table Views Sélection d’une ligne ■ Avant de sélectionner une ligne ■ Après sélection d’une ligne
  • 102. 8. Table Views Taille d’une ligne Taille du texte
  • 103. 8. Table Views Exercice 7 : Créer ses propres cellules, exemple 1 Créer un projet «Cell» Placer une Table View sur la vue Connecter les DataSource et Delegate avec File’s Owner
  • 104. 8. Table Views Exercice 7 : Créer ses propres cellules, exemple 1 Déclaration de nos sources de données
  • 105. 8. Table Views Exercice 7 : Créer ses propres cellules, exemple 1 Création manuelle de la cellule : ajout du label «Name»
  • 106. 8. Table Views Exercice 7 : Créer ses propres cellules, exemple 1 Création manuelle de la cellule : ajout du label «Color» Création manuelle de la cellule : ajout du label «nameValue» Création manuelle de la cellule : ajout du label «colorValue»
  • 107. 8. Table Views Exercice 7 : Créer ses propres cellules, exemple 1 Ajout les valeurs aux deux champs
  • 108. 8. Table Views Exercice 8 : Création de CustomCell.h, exemple 2 Ajouter au projet, un UITableViewCell Ouvrir CustomCell.xib Ajouter une «Table View Cell» à partir de la librairie Changer la classe de UITableViewCell en CustomCell Changer la taille de la cellule en 65 pixels
  • 109. 8. Table Views Exercice 8 : Création de CustomCell.h, exemple 2 Double clic sur l’icône CustomCell Déposer l’objet «View» sur cette vue Changer la taille de la vue : x = 0, y = 0, w = 320 et h = 65 Déposer 4 labels sur la vue et relier les pointeurs sur ces labels
  • 110. 8. Table Views Exercice 8 : Création de CustomCell.h, exemple 2 Effectuer les changements suivants Création de la cellule à partir du nib Obtenir tous les objets du nib
  • 111. 8. Table Views Exercice 8 : Création de CustomCell.h, exemple 2 Effectuer les changements suivants Pour spécifier que l’on a changé la taille de la cellule .h
  • 112. 8. Table Views Exercice 9 : Etudier l’exemple de projet intitulé « 08 Section 1» et « 08 Section 2 »
  • 113. 8. Table Views Points importants Ajouter un index Implémentation d’un barre de recherche Principe Créer un dictionnaire immutable qui contient tout les données ainsi qu’un dictionnaire mutable qui contiendra tous les résultats lors d’une recherche Problème : mutableCopy ne copie pas en profondeur les array et copie uniquement les références Solution : Créer soit meme une fonction qui copie en profondeur
  • 114. 8. Table Views Implémentation d’un barre de recherche Deep Mutable Copy .h .m Parcours du dictionnaire original On essaye de copier l’objet via mutable deep copy Si l’objet ne répond pas au message, on tente une mutable copy Si l’objet ne répond pas au message, on tente une simple copie
  • 116. 9. Navigation Controllers Etude de l’exemple « 09 Nav» Mise en place de Navigation Controller
  • 117. 10. Paramètres de l’application
  • 118. 10. Paramètres d’une application Exercice 10 : Utility Application Créer un projet «AppSettings»
  • 119. 10. Paramètres d’une application Exercice 10 : Settings Bundle Property list nommée ‘Root.plist» permet de spécifier les paramètres de l’application. Ce fichier suit une structure très précise Ajouter un «Settings Bundle» au projet : «Settings» Analyse du fichier Root.plist
  • 120. 10. Paramètres d’une application Analyse du fichier Root.plist
  • 121. 10. Paramètres d’une application Analyse du fichier Root.plist
  • 122. 10. Paramètres d’une application Lecture des paramètres dans l’application Classe NSUserDefaults
  • 123. 10. Paramètres d’une application Ecriture des paramètres dans l’application
  • 124. 11. Persistance des données
  • 125. 11. Persistance des données 3 possibilités pour sauvegarder des données Proporty List Archive Object SQLite 3 Core Data Créer un chemin d’un fichier Récupérer le dossier de stockage des documents sur l’iPhone Accès au dossier tmp
  • 126. 11. Persistance des données Méthode 1 : Property List Liste des objets pouvant être sauvegardé dans un fichier «plist» Méthode Inconvénient : Les autres objets ne peuvent pas être sauvegardés
  • 127. 11. Persistance des données Méthode 1 : Property List Lecture des données Ecriture des données
  • 128. 11. Persistance des données Méthode 2 : Archiver les objets Protocole NSCoding possède deux méthodes obligatoires pour archiver Avant de pouvoir sauvegarder une archive, il faut que la classe soit conforme à NSCoding et NSCopying Encoder Décoder Si on surclasse une classe qui ne conforme pas à NSCoding
  • 129. 11. Persistance des données Méthode 2 : Archiver les objets Protocole NSCoding possède deux méthodes obligatoires pour archiver Décoder Si on surclasse d’autre classes qui ne conforme pas NSCoding NSCopying On crée une nouvelle instance de notre classe et ensuite on assigne les mêmes valeurs aux propriétés Pointeur sur une structure pour la gestion mémoire (Peut important)
  • 130. 11. Persistance des données Méthode 2 : Archiver les objets Persistance du «Data Object» Archiver les objets dans un NSMutableData Contiendra l’objet encodé Création d’une clé pour encoder n’importe quel objet dans l’archive Désallocation On prévient l’archive que l’on a fini d’encoder nos objets On enregistre l’archive
  • 131. 11. Persistance des données Méthode 2 : Archiver les objets Persistance du «Data Object» Décoder l’archive Contiendra l’objet décodé Lecture des objets désarchivés avec la clé définie précédemment Désallocation Explorer l’exemple «11 Persistence Archiving»
  • 132. 11. Persistance des données Méthode 3 : SQLite 3 Ouverture de la base de données Importer le frameworks «libsqlite3.dylib» Fermer la base de données Créer une table
  • 133. 11. Persistance des données Méthode 3 : SQLite 3 Effectuer des requêtes
  • 134. 11. Persistance des données Méthode 3 : SQLite 3 Bind Variables pour insérer des champs Explorer l’exemple «11 Persistence SQLite»
  • 135. 11. Persistance des données Méthode 4 : Core Data Classes permettant de gérer facilement la persistance des données Principe de Core Data basé sur la description des données Pour se faire : création d’entités et d’attributs (un peu comme en UML) 1. Déclaration de l’entité 2. Déclaration d’un attributs 3. Modification des propriétés de l’attribut
  • 136. 11. Persistance des données Méthode 4 : Core Data Etablir des relations entre les entités Explorer l’exemple «11 Core Data Persistence»
  • 137. 12. Dessiner avec Quartz
  • 138. 12. Dessiner avec Quartz Quartz Classe UIView, fonction drawRect Le dessin s’effectue avec un context. Chaque vue à un contexte associé Fonctions de dessin Couleurs StrokeColor : pour la couleur d’une ligne et le contour d’une forme FillColor : pour la couleur interne d’une forme
  • 139. 12. Dessiner avec Quartz Explorer le projet «QuartzDemo»

Notes de l'éditeur

  • #17: Other Sources : source code qui n’est pas de l’Objective C (.pch : en-tête précompilée) Ressources : toutes les fichiers qui seront utilisables par l’application