Formation iPhone ENSI by (Orange Tunisie)

2,853 views
2,709 views

Published on

Published in: Education
1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total views
2,853
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
94
Comments
1
Likes
2
Embeds 0
No embeds

No notes for slide
  • 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
  • Formation iPhone ENSI by (Orange Tunisie)

    1. 1. SDK iPhone <ul><li>Programme de formation </li></ul>
    2. 2. Présentation <ul><li>Lancé en mars 2008 </li></ul><ul><li>Compatible avec Mac OS X </li></ul><ul><li>Langage : Cocoa </li></ul><ul><li>Environnement de développement : Xcode et Interface Builder </li></ul><ul><li>Développement pour iPhone et iPod Touch </li></ul><ul><li>100 000 applications disponibles </li></ul><ul><li>3 milliards de téléchargements (21 milliards en 2013) </li></ul><ul><li>75% des applications sont gratuites </li></ul>
    3. 3. Plan de formation <ul><li>1. Introduction </li></ul><ul><li>2. Création d’un projet </li></ul><ul><li>3. Programmation </li></ul><ul><li>4. Interface utilisateur </li></ul><ul><li>5. Rotation et dimensionnement </li></ul><ul><li>6. Applications à vues multiples </li></ul><ul><li>7. Tab Bars et Pickers </li></ul><ul><li>8. Table Views </li></ul>
    4. 4. Plan de formation <ul><li>9. Navigation Controllers </li></ul><ul><li>10.Paramètres de l’application </li></ul><ul><li>11. Persistance des données </li></ul><ul><li>12. Dessiner avec Quartz </li></ul><ul><li>13. Interaction de l’utilisateur </li></ul><ul><li>14. Utilisation de la caméra et de l’album photo </li></ul><ul><li>15. Publication sur l’AppStore </li></ul>
    5. 5. 1. Introduction
    6. 6. 1. Introduction <ul><li>Ouvrir un compte Apple </li></ul><ul><li>http://developer.apple.com/iphone/ </li></ul><ul><li>SDK version 3.1.2 </li></ul>Téléchargement du SDK
    7. 7. 1. Introduction <ul><li>Uniquement une application en exécution </li></ul><ul><li>Uniquement une fenêtre à la fois </li></ul><ul><li>Accès limité au workspace de l’application </li></ul><ul><li>Temps de réponse limité </li></ul><ul><li>Ecran limité </li></ul><ul><li>Ressources systèmes limitées </li></ul><ul><li>Pas de souris ni de clavier physique </li></ul>Caractéristiques d’une application
    8. 8. 1. Introduction Programmation Cocoa <ul><li>Objets Objective-C </li></ul>NSString NSNumber NSArray NSMutableArray NSDictionary NSMutableDictionary NSDate int BOOL <ul><li>Envoyer des messages aux objets </li></ul>Autres langages : alert.show(); En Objective-C : [alert show];
    9. 9. 1. Introduction Programmation Cocoa <ul><li>Envoyer des messages aux objets avec des paramètres </li></ul>Autres langages : alert.show(&quot;A Funny Message&quot;, 3); En Objective-C : [alert show:@&quot;I say this!&quot; thisManyTimes:3]; <ul><li>Instancier des objets </li></ul>myClass *myObject = [[myClass alloc] init]; <ul><li>Libération des objets </li></ul>[myObject release];
    10. 10. 1. Introduction Programmation Cocoa <ul><li>Pattern de l’utilisation des objets </li></ul><ul><li>Management de la mémoire </li></ul>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. 11. 1. Introduction Programmation Cocoa <ul><li>Classe NSString </li></ul>NSString *lotsOfInsertedStuffString = [NSString stringWithFormat:@&quot;I am adding this number: %i and this string:%@.&quot;, 45, myString]; NSLog(lotsOfInsertedStuffString); NSString *myString = [[NSString alloc] initWithString:@&quot;A String&quot;]; NSLog(myString); [myString release]; Ou NSString *myString = @&quot;A String&quot;; NSLog(myString);
    12. 12. 1. Introduction Programmation Cocoa <ul><li>Classe NSNumber </li></ul>On peut utiliser de la classe NSNumber ou les types en C : int i = 3; NSLog(@&quot;i = %i&quot;, i); double d = 3.4; NSLog(@&quot;d = %f&quot;, d); double dPlusi = d + i; NSLog(@&quot;d + i = %f&quot;, dPlusi);
    13. 13. 1. Introduction Programmation Cocoa <ul><li>Classe NSArray </li></ul>NSMutableArray *myArray = [[NSMutableArray alloc] init]; [myArray addObject:@&quot;Element 1&quot;]; [myArray addObject:@&quot;Element 2&quot;]; NSLog([myArray objectAtIndex:0]); NSLog([myArray lastObject]); for (NSString *s in myArray) { NSLog(s); } [myArray release];
    14. 14. 2. Création d’un projet
    15. 15. 2. Création d’un projet
    16. 16. 2. Création d’un projet Xcode
    17. 17. 2. Création d’un projet Application Delegate <ul><li>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 : </li></ul><ul><li>connexion à une base de données, </li></ul><ul><li>configuration générale, </li></ul>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. 18. 2. Création d’un projet Frameworks Comme son nom l'indique, cette partie contient les &quot;includes&quot; 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. 19. 2. Création d’un projet <ul><li>File’s Owner : instance de l’objet qui a chargé le fichier nib (NeXT Interface Builder) du disque </li></ul><ul><li>First Responder : objet avec lequel l’utilisateur intéragit </li></ul><ul><li>Autres objets : Instances d’objets qui seront créés lorsque le fichier nib se chargera </li></ul>Interface Builder
    20. 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. 21. 2. Création d’un projet <ul><li>Image .png obligatoire et de taille de 57 x 57 pixels </li></ul><ul><li>Importer l’image dans le projet </li></ul><ul><li>Spécifier dans les paramètres de l’application («mon_prj-Info.plist») une icône </li></ul>Ajout d’une icône à l’application
    22. 22. 2. Création d’un projet <ul><li>Exercice 1 : </li></ul><ul><li>Créer un projet Hello World </li></ul><ul><li>Placer un label «Hello World» sur la vue </li></ul><ul><li>Changer ses attributs (Taille, couleur ...) </li></ul><ul><li>Ajouter une icône à l’application </li></ul><ul><li>Compiler </li></ul>
    23. 23. 3. Programmation
    24. 24. 3. Programmation <ul><li>Architecture et méthode de conception qui organise l’interface homme-machine (IHM) </li></ul><ul><li>Division de l’IHM en : </li></ul><ul><ul><li>Un modèle (Modèle de données) </li></ul></ul><ul><ul><li>Une vue (Présentation, interface) </li></ul></ul><ul><ul><li>Un contrôleur (Logique de contrôle, gestion des évènements, synchronisation) </li></ul></ul>Concept du «Modèle-Vue-Contrôleur» <ul><li>Lorsqu'un client envoie une requête à l'application : </li></ul><ul><ul><li>la requête est analysée par le contrôleur </li></ul></ul><ul><ul><li>le contrôleur demande au modèle approprié d’effectuer les traitements </li></ul></ul><ul><ul><li>le contrôleur renvoie la vue adaptée </li></ul></ul>
    25. 25. 3. Programmation <ul><li>Exercice 2 : </li></ul><ul><li>Créer un projet Button Fun </li></ul><ul><li>Ajouter deux boutons et un label </li></ul>
    26. 26. 3. Programmation Classe Controller.h Sous classe de UIViewController
    27. 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. 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. 29. 3. Programmation Classe Controller.m
    30. 30. 3. Programmation Classe Controller.m
    31. 31. 3. Programmation <ul><li>Exercice 2 (suite) : </li></ul><ul><li>Déclarer un pointeur «statusText» sur le label </li></ul><ul><li>Déclarer une fonction «buttonPressed» </li></ul>
    32. 32. 3. Programmation Exercice 2 : Correction .h .m Création des accesseurs et mutateurs Implémentation de la fonction
    33. 33. 3. Programmation Exercice 2 : Correction .m Concernant l’allocation ... ou ...
    34. 34. 3. Programmation Connecter des pointeurs 1. Relier le File’s Owner au Label pour créer la connexion 2. Choisir le pointeur
    35. 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. 36. 3. Programmation <ul><li>Exercice 2 (suite) : </li></ul><ul><li>Relier les pointeurs avec les objets présents dans Interface Builder </li></ul><ul><li>Tester l’application </li></ul>
    37. 37. 4. Interface utilisateur
    38. 38. 4. Interface utilisateur <ul><li>Liste des contrôles disponibles dans IB : </li></ul><ul><ul><li>Image View </li></ul></ul><ul><ul><li>Text Field </li></ul></ul><ul><ul><li>Slider </li></ul></ul><ul><ul><li>Segmented Control </li></ul></ul><ul><ul><li>Button </li></ul></ul><ul><ul><li>Label </li></ul></ul><ul><ul><li>Switch </li></ul></ul><ul><li>Les contrôles peuvent être du type : </li></ul><ul><ul><li>Actif (Button ...) </li></ul></ul><ul><ul><li>Statique (Label ...) </li></ul></ul><ul><ul><li>Passif (Text Field ...) </li></ul></ul>
    39. 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. 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. 41. 4. Interface utilisateur <ul><li>Exercice 3 : </li></ul><ul><li>Créer un projet «Control Fun» </li></ul><ul><li>Créer l’interface comme celle présentée à droite </li></ul><ul><li>Déterminer le nombre de pointeurs nécessaires </li></ul><ul><li>Déterminer le nombre d’actions nécessaires </li></ul><ul><li>Implémenter l’ImageView et les deux TextFields </li></ul>
    42. 42. 4. Interface utilisateur <ul><li>Exercice 3 : </li></ul><ul><li>Image View : image statique (pas besoin de pointeurs) </li></ul><ul><li>Labels : pas besoin de pointeurs </li></ul><ul><li>TextFields : pointeurs à déclarer </li></ul><ul><li>(nameField et numberField) </li></ul><ul><li>Slider : un pointeur pour le label et une action pour le slider </li></ul><ul><li>(sliderLabel et fonction sliderChanged) </li></ul><ul><li>Segmented Control : pas besoin de pointeurs, une action </li></ul><ul><li>(fonction toggleControls) </li></ul><ul><li>Button : pointeur et action </li></ul><ul><li>(doSomethingButton et fonction buttonChanged) </li></ul><ul><li>Switches : un pointeur pour chaque et une action </li></ul><ul><li>(leftSwitch et rightSwitch) </li></ul>
    43. 43. 4. Interface utilisateur <ul><li>Cacher le clavier lorsque la touche Done est enfoncée </li></ul><ul><li>Evénement lié : Did End On Exit </li></ul>.h .m FirstResponder : c’est le contrôle pour lequel l’utilisateur est en train de interagir avec
    44. 44. 4. Interface utilisateur Cacher le clavier lorsqu’on touche l’arrière plan .h .m
    45. 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 <ul><li>Evénement lié : Touch Down </li></ul>
    46. 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. 47. 4. Interface utilisateur <ul><li>Exercice 3 (suite) : </li></ul><ul><li>Implémenter le Slider </li></ul>
    48. 48. 4. Interface utilisateur Implémentation du Slider .h .m
    49. 49. 4. Interface utilisateur <ul><li>Exercice 3 (suite) : </li></ul><ul><li>Implémenter le SegmentedControl ainsi que les Switches </li></ul>
    50. 50. 4. Interface utilisateur Implémentation du Switch et du Segmented Control .h
    51. 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. 52. 4. Interface utilisateur <ul><li>Exercice 3 (suite) : </li></ul><ul><li>Implémenter le Button «Do Something» </li></ul>UIActionSheet UIAlertView
    53. 53. 4. Interface utilisateur Implémentation de l’ActionSheet .h .m Déclaration du protocole
    54. 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. 55. 4. Interface utilisateur viewDidLoad et viewDidUnload <ul><li>viewDidLoad : Permet d’initialiser la vue, les variables, fonctions ... lorsqu’elle se charge </li></ul><ul><li>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. </li></ul>
    56. 56. 5. Rotation et dimensionnement
    57. 57. 5. Rotation et dimensionnement <ul><li>Taille de l’écran : </li></ul><ul><ul><li>320 pixels x 460 pixels (ou 480 s’il n’y a pas de barre de statut) </li></ul></ul><ul><ul><li>Trois approches pour la rotation : </li></ul></ul><ul><ul><ul><li>Dimensionnement automatique : rapide et simple mais pas approprié pour des applications complexes </li></ul></ul></ul><ul><ul><ul><li>Positionnement manuel lors de la rotation </li></ul></ul></ul><ul><ul><ul><li>Créer deux versions de la vue (Portrait et paysage) </li></ul></ul></ul>
    58. 58. 5. Rotation et dimensionnement Autosizing : <ul><ul><li>Pour autoriser n’importe quel sens d’orientation : </li></ul></ul>
    59. 59. 5. Rotation et dimensionnement Redimensionnement : <ul><ul><li>Examiner l’ exemple fournit en annexe : </li></ul></ul><ul><li>«05 Autosize 1» </li></ul>
    60. 60. 5. Rotation et dimensionnement Redimensionnement manuel : <ul><ul><li>Examiner l’exemple fournit en annexe : «05 Autosize 2» </li></ul></ul>
    61. 61. 5. Rotation et dimensionnement Création de deux vues : <ul><ul><li>Examiner l’exemple fournit en annexe : «05 Swap» </li></ul></ul>
    62. 62. 6. Applications à vues multiples
    63. 63. 6. Applications à vues multiples Navigation Bar Tab Bar et Navigation Bar Classe : UINavigationController Classe : UITabBarController
    64. 64. 6. Applications à vues multiples <ul><li>Exercice 4 : Création du projet </li></ul><ul><li>Créer un projet «View Switcher» </li></ul><ul><li>Choisir «Window-based Application» (Contient uniquement une Window et une application delegate) </li></ul><ul><li>On créé un «Root Controller» qui va coordonner l’affichage des deux vues </li></ul>
    65. 65. 6. Applications à vues multiples <ul><li>Exercice 4 : Création des contrôleurs </li></ul><ul><li>Ajouter au projet le template «UIViewController subclass» </li></ul><ul><li>Nommez le «SwitchViewController.m» </li></ul><ul><li>Faire de même en créant : «BlueViewController.m» et «YellowViewController.m» </li></ul>
    66. 66. 6. Applications à vues multiples <ul><li>Exercice 4 : Création des vues </li></ul><ul><li>Ajouter au projet deux templates «View XIB» </li></ul><ul><li>Ils correspondent à deux fichiers «nib» qui représentent nos deux vues </li></ul><ul><li>Nommez les «BlueView.xib» et «YellowView.xib» </li></ul>
    67. 67. 6. Applications à vues multiples Exercice 4 : Modification de l’App Delegate View_SwitcherAppDelegate.h <ul><li>Déclaration d’un pointeur sur notre «root controller» car il sera intégré à l’application lorsqu’elle sera lancée </li></ul>
    68. 68. 6. Applications à vues multiples Exercice 4 : Modification de l’App Delegate View_SwitcherAppDelegate.m
    69. 69. 6. Applications à vues multiples Exercice 4 : SwitchViewController.h <ul><li>Déclaration des pointeurs et des actions dont nous aurons besoin </li></ul><ul><li>Pointeurs sur les deux classes sur lesquelles on va switcher </li></ul><ul><li>Action pour switcher les vues (Appelée lorsque le bouton sera enfoncé) </li></ul>
    70. 70. 6. Applications à vues multiples Exercice 4 : Modification de MainWindow.xib <ul><li>Ajout d’une instance de SwitchViewController dans le MainWindow.xib </li></ul><ul><li>Changer la classe de l’objet en </li></ul><ul><li>SwitchViewController </li></ul><ul><li>Construire l’interface (Toolbar) et connecter le bouton à l’action «switchViews» </li></ul>
    71. 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. 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. 73. 6. Applications à vues multiples Exercice 4 : Implémentation des alertes <ul><li>Implémenter les alertes (UIAlertView) dans chacune des deux vues </li></ul>
    74. 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. 75. 7. Tab Bars et Pickers
    76. 76. 7. Tab Bars et Pickers <ul><li>Exercice 5 : Création du projet </li></ul><ul><li>Créer un projet «Pickers» </li></ul><ul><li>Choisir «Window-based Application» (Contient uniquement une Window et une application delegate) </li></ul><ul><li>On créé 4 «Root Controller» : DatePickerViewController.h, SingleComponentPickerViewController.m, DoubleComponentPickerViewController.m, DependentComponentPickerViewController.m </li></ul>
    77. 77. 7. Tab Bars et Pickers Exercice 5 : Ajout du Root View Controller .h .m
    78. 78. 7. Tab Bars et Pickers Exercice 5 : Ajout du Root View Controller <ul><li>Icônes de la Tab Bar : 24 x 24 pixels, fond transparent, format .png </li></ul><ul><li>Ouvrir «MainWindow.xib», ajouter une «Tab Bar Controller» </li></ul><ul><li>Ajouter 4 items qui correspondent à nos 4 vues </li></ul><ul><li>Associer chaque Table View Controller avec le fichier nib correspondant </li></ul>
    79. 79. 7. Tab Bars et Pickers Exercice 5 : Ajout du Root View Controller <ul><li>Changer la classe en «DatePickerViewController» dans «Identity Inspector» </li></ul><ul><li>Répéter la procédure pour les 4 autres items </li></ul><ul><li>Control Drag de «Pickers App Delegate» au «Tab Bar Controller» et connecter le pointeur «rootController» </li></ul>Icône rouge pour afficher des infos Appliquer un style prédéfini à l’item Customiser l’apparence de l’item
    80. 80. 7. Tab Bars et Pickers Exercice 5 : Implémentation de Date Picker <ul><li>Ajouter un pointeur (Pour récupérer la date sélectionnée) : datePicker </li></ul><ul><li>Ajouter une action (Pour afficher une «AlertView» avec la date sélectionnée) </li></ul><ul><ul><li>buttonPressed </li></ul></ul><ul><li>Ouvrir DatePickerViewController.xib </li></ul><ul><li>Redimensionner la fenêtre en spécifiant dans «BottomBar», Tab Bar </li></ul><ul><li>Ajouter à partir de la librairie un DatePicker et un bouton </li></ul>
    81. 81. 7. Tab Bars et Pickers Exercice 5 : Implémentation de Date Picker
    82. 82. 7. Tab Bars et Pickers Exercice 5 : Single Compenent Picker <ul><li>Ajouter un pointeur (Pour récupérer le choix sélectionnée) : singlePicker </li></ul><ul><li>Ajouter une action (Pour afficher une «AlertView») buttonPressed </li></ul><ul><li>Inclure les protocoles UIPickerViewDelegate et UIPickerViewDataSource </li></ul>.h <ul><li>Ouvrir SingleCompenentPickerViewController.xib </li></ul><ul><li>Redimensionner la fenêtre en spécifiant dans «BottomBar», Tab Bar </li></ul><ul><li>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) </li></ul>
    83. 83. 7. Tab Bars et Pickers Exercice 5 : Single Compenent Picker Initialisation d’un array
    84. 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. 85. 7. Tab Bars et Pickers Exercice 5 : Multicompenent Picker <ul><li>Ajouter un pointeur (Pour récupérer le choix sélectionnée) : doublePicker </li></ul><ul><li>Ajouter une action (Pour afficher une «AlertView») buttonPressed </li></ul><ul><li>Ajouter deux Array et inclure les protocoles UIPickerViewDelegate et UIPickerViewDataSource </li></ul>.h <ul><li>Ouvrir SingleCompenentPickerViewController.xib et créer l’interface </li></ul>
    86. 86. 7. Tab Bars et Pickers Exercice 5 : Multicompenent Picker
    87. 87. 7. Tab Bars et Pickers Exercice 5 : Multicompenent Picker
    88. 88. 7. Tab Bars et Pickers NSDictionary et NSArray
    89. 89. 7. Tab Bars et Pickers Exercice 5 : Depedent Components <ul><li>Ajouter un pointeur (Pour récupérer le choix sélectionnée) : picker </li></ul><ul><li>Ajouter une action (Pour afficher une «AlertView») buttonPressed </li></ul><ul><li>Ajouter deux Array, un Dictionary et inclure les protocoles UIPickerViewDelegate et UIPickerViewDataSource </li></ul>.h <ul><li>Ouvrir DependentCompenentPickerViewController.xib et créer l’interface </li></ul>
    90. 90. 7. Tab Bars et Pickers Exercice 5 : Depedent Components
    91. 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. 92. 7. Tab Bars et Pickers Exercice 5 : Depedent Components
    93. 93. 8. Table Views
    94. 94. 8. Table Views <ul><li>Principe des vues sous forme de listes </li></ul>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. 95. 8. Table Views <ul><li>Styles des Table Views </li></ul>Grouped table Plain table sans index Plain table avec index
    96. 96. 8. Table Views <ul><li>Les sections dans une Table Views </li></ul>
    97. 97. 8. Table Views <ul><li>Exercice 6 : Une simple Table View </li></ul><ul><li>Créer un projet «Simple Table» </li></ul><ul><li>Placer une Table View sur la vue </li></ul><ul><li>Connecter les DataSource et Delegate avec File’s Owner </li></ul><ul><li>Implémenter le Simple_TableViewController (Ajouter les protocoles ainsi que un array qui contiendra les données) </li></ul>
    98. 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. 99. 8. Table Views Exercice 6 : Ajout d’une image dans chaque ligne propriété imageView
    100. 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. 101. 8. Table Views Sélection d’une ligne ■ Avant de sélectionner une ligne ■ Après sélection d’une ligne
    102. 102. 8. Table Views Taille d’une ligne Taille du texte
    103. 103. 8. Table Views Exercice 7 : Créer ses propres cellules, exemple 1 <ul><li>Créer un projet «Cell» </li></ul><ul><li>Placer une Table View sur la vue </li></ul><ul><li>Connecter les DataSource et Delegate avec File’s Owner </li></ul>
    104. 104. 8. Table Views Exercice 7 : Créer ses propres cellules, exemple 1 Déclaration de nos sources de données
    105. 105. 8. Table Views Exercice 7 : Créer ses propres cellules, exemple 1 Création manuelle de la cellule : ajout du label «Name»
    106. 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. 107. 8. Table Views Exercice 7 : Créer ses propres cellules, exemple 1 Ajout les valeurs aux deux champs
    108. 108. 8. Table Views Exercice 8 : Création de CustomCell.h, exemple 2 <ul><li>Ajouter au projet, un UITableViewCell </li></ul><ul><li>Ouvrir CustomCell.xib </li></ul><ul><li>Ajouter une «Table View Cell» à partir de la librairie </li></ul><ul><li>Changer la classe de UITableViewCell en CustomCell </li></ul><ul><li>Changer la taille de la cellule en 65 pixels </li></ul>
    109. 109. 8. Table Views Exercice 8 : Création de CustomCell.h, exemple 2 <ul><li>Double clic sur l’icône CustomCell </li></ul><ul><li>Déposer l’objet «View» sur cette vue </li></ul><ul><li>Changer la taille de la vue : </li></ul><ul><ul><li>x = 0, y = 0, w = 320 et h = 65 </li></ul></ul><ul><li>Déposer 4 labels sur la vue et relier les pointeurs sur ces labels </li></ul>
    110. 110. 8. Table Views Exercice 8 : Création de CustomCell.h, exemple 2 <ul><li>Effectuer les changements suivants </li></ul>Création de la cellule à partir du nib Obtenir tous les objets du nib
    111. 111. 8. Table Views Exercice 8 : Création de CustomCell.h, exemple 2 <ul><li>Effectuer les changements suivants </li></ul>Pour spécifier que l’on a changé la taille de la cellule .h
    112. 112. 8. Table Views Exercice 9 : <ul><li>Etudier l’exemple de projet intitulé « 08 Section 1» et « 08 Section 2 » </li></ul>
    113. 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. 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
    115. 115. 9. Navigation Controllers
    116. 116. 9. Navigation Controllers Etude de l’exemple « 09 Nav» Mise en place de Navigation Controller
    117. 117. 10. Paramètres de l’application
    118. 118. 10. Paramètres d’une application <ul><li>Exercice 10 : Utility Application </li></ul><ul><li>Créer un projet «AppSettings» </li></ul>
    119. 119. 10. Paramètres d’une application <ul><li>Exercice 10 : Settings Bundle </li></ul><ul><li>Property list nommée ‘Root.plist» permet de spécifier les paramètres de l’application. </li></ul><ul><li>Ce fichier suit une structure très précise </li></ul><ul><li>Ajouter un «Settings Bundle» au projet : «Settings» </li></ul>Analyse du fichier Root.plist
    120. 120. 10. Paramètres d’une application Analyse du fichier Root.plist
    121. 121. 10. Paramètres d’une application Analyse du fichier Root.plist
    122. 122. 10. Paramètres d’une application Lecture des paramètres dans l’application Classe NSUserDefaults
    123. 123. 10. Paramètres d’une application Ecriture des paramètres dans l’application
    124. 124. 11. Persistance des données
    125. 125. 11. Persistance des données <ul><li>3 possibilités pour sauvegarder des données </li></ul><ul><li>Proporty List </li></ul><ul><li>Archive Object </li></ul><ul><li>SQLite 3 </li></ul><ul><li>Core Data </li></ul>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. 126. 11. Persistance des données <ul><li>Méthode 1 : Property List </li></ul><ul><li>Liste des objets pouvant être sauvegardé dans un fichier «plist» </li></ul>Méthode Inconvénient : Les autres objets ne peuvent pas être sauvegardés
    127. 127. 11. Persistance des données Méthode 1 : Property List Lecture des données Ecriture des données
    128. 128. 11. Persistance des données <ul><li>Méthode 2 : Archiver les objets </li></ul><ul><li>Protocole NSCoding possède deux méthodes obligatoires pour archiver </li></ul><ul><li>Avant de pouvoir sauvegarder une archive, il faut que la classe soit conforme à NSCoding et NSCopying </li></ul>Encoder Décoder Si on surclasse une classe qui ne conforme pas à NSCoding
    129. 129. 11. Persistance des données <ul><li>Méthode 2 : Archiver les objets </li></ul><ul><li>Protocole NSCoding possède deux méthodes obligatoires pour archiver </li></ul>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. 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. 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. 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. 133. 11. Persistance des données Méthode 3 : SQLite 3 Effectuer des requêtes
    134. 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. 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. 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. 137. 12. Dessiner avec Quartz
    138. 138. 12. Dessiner avec Quartz <ul><li>Quartz </li></ul><ul><li>Classe UIView, fonction drawRect </li></ul><ul><li>Le dessin s’effectue avec un context. Chaque vue à un contexte associé </li></ul><ul><li>Fonctions de dessin </li></ul>Couleurs <ul><li>StrokeColor : pour la couleur d’une ligne et le contour d’une forme </li></ul><ul><li>FillColor : pour la couleur interne d’une forme </li></ul>
    139. 139. 12. Dessiner avec Quartz Explorer le projet «QuartzDemo»

    ×