Fondements du cadre social

Apprenez à exploiter le pouvoir du cadre social avec cet article, tiré du chapitre 11 du livre Mobiletuts + Décodage du SDK iOS 6!


L'introduction du cadre Twitter dans iOS 5 a été le premier pas vers l'intégration d'iOS aux réseaux sociaux populaires. Dans iOS 6, Apple a introduit le cadre social. Non seulement le cadre social remplace-t-il efficacement le cadre Twitter, il étend également ses fonctionnalités en ajoutant la prise en charge de Facebook et de Sina Weibo.

Même si le framework Twitter est obsolète depuis iOS 6, la migration du code existant du framework Twitter vers le framework Social est heureusement une tâche triviale. Les API du cadre social ne font pas mention de réseaux sociaux spécifiques. Le composant réseau a été extrait, ce qui rend l’ajout de la prise en charge de nouveaux réseaux sociaux à l’avenir plus simple. Conclusion: la bonne nouvelle pour les développeurs est qu’il est facile de se familiariser avec le cadre social, en particulier si vous connaissez déjà le cadre Twitter..

Dans ce chapitre, je vais vous donner un aperçu du cadre social et de ce qu’il a à offrir. Je vous montrerai quelles sont vos options lorsque vous souhaitez ajouter un composant social à vos applications. Alors que ce chapitre ne couvrira que les bases du cadre social, le prochain chapitre parlera d’une intégration plus poussée de votre application avec le cadre social. En prime, je discuterai également de la classe UIActivityViewController. Ceci est un autre ajout à UIKit qui facilite le partage de contenu.!


Aperçu théorique

Avant iOS 6, le partage de contenu n'était pas si facile. Si vous avez déjà intégré Facebook avec une application iOS, vous avez certainement rencontré un certain nombre d'obstacles au cours de votre parcours. Sous iOS 6, cependant, un certain nombre d'améliorations importantes ont été apportées. Depuis iOS 6, l'intégration avec les réseaux sociaux est désormais intégrée au système d'exploitation, ce qui facilite beaucoup le partage social pour les développeurs de SDK..

Au moment de la rédaction de ce document, le cadre social prend en charge l'intégration avec Facebook, Sina Weibo et Twitter. La prise en charge de Twitter est la raison évidente de la dépréciation du framework Twitter. Sina Weibo pourrait être le canard étrange dans la rangée pour certains d'entre vous. Sina Weibo est une plate-forme de microblogging immensément populaire en Chine, l'un des pays les plus peuplés du monde. Il n'est donc pas étonnant de voir son intégration dans iOS.

Partage de contenu

En gardant cela à l'esprit, quelles options avez-vous lorsqu'une de vos applications doit s'intégrer à Facebook, Twitter ou Sina Weibo? Le cadre social offre deux options, en utilisant (1) le SLComposeViewController classe ou (2) la SLRequête classe. Si vous avez utilisé le framework Twitter dans iOS 5, ces noms de classe sonneront certainement..

Dans ce chapitre, je zoomerai sur le SLComposeViewController classe. Il s’agit d’une solution simple, élégante et permettant aux utilisateurs de partager du contenu avec Twitter, Facebook et Sina Weibo. Regardons ce nouveau venu.

SLComposeViewController

Le moyen le plus simple de partager du contenu avec l’un des réseaux sociaux pris en charge consiste à utiliser le SLComposeViewController classe. Son préfixe, SL, indique qu'il fait partie du cadre social. le SLComposeViewController la classe est l'équivalent de la TWTweetComposeViewController classe du cadre Twitter. La différence la plus importante est que SLComposeViewController n'est pas lié à un réseau social en particulier.

Créer une instance de SLComposeViewController est aussi simple que d'appeler composeViewControllerForServiceType: sur la classe et en transmettant le type de service, c’est-à-dire le réseau social que vous ciblez. Au moment d'écrire ces lignes, il y a trois options, SLServiceTypeTwitter, SLServiceTypeFacebook, et SLServiceTypeSinaWeibo.

Vous pouvez configurer le SLComposeViewController exemple en définissant le texte initial ou en ajoutant une image ou un lien. Configuration du SLComposeViewController Cette instance est une étape facultative, car l'utilisateur pourra modifier le contenu du message avant de l'envoyer au service cible..

Avant de présenter le contrôleur de vue de composition à l'utilisateur, il est recommandé de définir son gestionnaire d'achèvement (SLComposeViewControllerCompletionHandler). Ce dernier est un bloc qui est exécuté lorsque la demande adressée au service est terminée, avec succès ou non. Le bloc prend un paramètre, le résultat de la demande. Cela peut être utile si vous souhaitez informer l'utilisateur de la réussite ou non de la demande..

Présenter le SLComposeViewController l’utilisateur se fait en lui envoyant un message de presentViewController: animé: comme vous le faites avec n'importe quel autre contrôleur de vue (modal). Comme je l'ai mentionné précédemment, l'utilisateur peut toujours modifier le message, géolocaliser le message ou ajouter une image ou un lien. Les options ainsi que l’interface utilisateur du SLComposeViewController exemple, dépendent du service ciblé. Si l'utilisateur envoie un message à Facebook, par exemple, la vue modale du message SLComposeViewController par exemple est orné avec le schéma de couleurs familier violacé.

le SLComposeViewController la classe a une autre méthode de classe qui mérite d'être mentionnée, isAvailableForServiceType:. TWTweetComposeViewController a un nom de méthode de classe similaire, canSendTweet. Cette méthode permet à votre application de demander au système d'exploitation si le service que vous souhaitez cibler est disponible. Comme avec composeViewControllerForServiceType, la méthode de classe acceptera un type de service qui indique quel service est ciblé. Même si isAvailableForServiceType: renvoie un OUI ou NON, le système d'exploitation effectue un certain nombre de vérifications pour vous dans les coulisses. Il vérifiera si le réseau social est accessible et, plus important encore, il vérifiera si l'utilisateur a installé un compte valide pour le service cible. Examinons de plus près les comptes d'utilisateurs et leur gestion par le système d'exploitation..

Comptes de réseau social

Le cadre social adopte un concept appelé authentification unique (SSO), et il est important de comprendre les implications de cette décision de conception. En termes simples, il n'est plus nécessaire pour chaque application tierce de s'authentifier auprès du service cible, le système d'exploitation s'en occupe maintenant pour vous et expose un certain nombre de points finaux aux développeurs via le cadre Social. Comme vous l'avez peut-être deviné, cela signifie qu'un emplacement central pour stocker les comptes de l'utilisateur est nécessaire. Cet emplacement central est bien sûr l'application Paramètres d'iOS. En permettant aux utilisateurs de gérer les détails de leur réseau social à partir de Paramètres, le partage de contenu à partir d'applications est beaucoup plus efficace..

Bien que l'application Paramètres iOS 6 ne propose que la possibilité de gérer un seul compte Facebook, les utilisateurs peuvent contrôler plusieurs comptes Twitter. En stockant les comptes de l'utilisateur dans un emplacement central, les développeurs d'applications tierces n'ont plus besoin de gérer ces données sensibles eux-mêmes..


Figure 1
Figure 2

UIActivityViewController

UIActivityViewController est un merveilleux ajout à UIKit. Le partage de contenu devient un jeu d'enfant. Comme le nom de la classe l'indique, UIActivityViewController est une sous-classe de UIViewController. UIActivityViewController rend le partage du contenu trivial en offrant à l'utilisateur un éventail d'options parmi lesquelles choisir. L'utilisateur peut partager du contenu par courrier électronique, Twitter ou simplement coller une URL dans le presse-papiers. Vous avez le choix entre de nombreuses options et les terminaux ne sont pas limités aux trois réseaux sociaux pris en charge par le cadre Social. Comme le UIActivityViewController Le nom implique, la classe fait partie de UIKit, pas le cadre social. En d’autres termes, il n’est pas nécessaire de lier votre projet au cadre social si vous souhaitez uniquement utiliser le UIActivityViewController classe.

Même si UIActivityViewController ne faisant pas partie du cadre social, j’ai choisi de l’inclure dans ce chapitre car il partage un peu le terrain avec le cadre social. En fait, vous remarquerez dans quelques instants que UIActivityViewController partage un peu de fonctionnalité avec SLComposeViewController. Pour mieux comprendre UIActivityViewController , vous pouvez le comparer avec un bureau de poste. Un bureau de poste prendra votre message et s'assurera qu'il soit remis à l'adresse (le service ou le terminal) que vous avez indiquée..

Certains d'entre vous remarqueront peut-être qu'il ressemble à la célèbre bibliothèque open source ShareKit. UIActivityViewController est beaucoup plus puissant, car il s’intègre parfaitement au système d’exploitation et à ses services. Cependant, comme avec ShareKit, les développeurs peuvent ajouter des points de terminaison personnalisés au tableau de points de terminaison UIActivityViewController s'intègre avec et affiche à l'utilisateur.

En utilisant UIActivityViewController est aussi simple que d'utiliser SLComposeViewController. L’initialiseur désigné de UIActivityViewController prend deux paramètres, (1) les activités et (2) les activités d’application. Les deux arguments doivent être des instances de NSArray. Le premier paramètre est un tableau d'objets de données que vous souhaitez partager. Le tableau peut inclure un ou plusieurs extraits de texte ou une seule image. Le type de contenu que vous pouvez partager dépend non seulement du type de données que votre application peut fournir, mais également du type de données accepté par le point de terminaison. le UIActivityViewController La classe s'assurera que les objets de données sont traités correctement en fonction du service ou du noeud final choisi par l'utilisateur..

Le deuxième paramètre, les activités de l’application, est un tableau de services ou de points de terminaison qui UIActivityViewController présentera à l'utilisateur. Les services comprennent la messagerie électronique, Twitter, Facebook, l'impression ou la copie de quelque chose dans le presse-papiers. Comme je l'ai mentionné précédemment, les développeurs ont également la possibilité d'ajouter des services. Si les activités de l'application sont définies sur nil, le système d'exploitation utilisera le jeu d'activités par défaut..

Après avoir présenté le UIActivityViewController instance à l'utilisateur, UIActivityViewController va s'occuper du reste. Par exemple, si vous avez ajouté Twitter en tant qu'activité d'application, UIActivityViewController vérifie d'abord si Twitter est disponible et si l'utilisateur a installé un compte Twitter sur son appareil avant de le présenter en option à l'utilisateur final. UIActivityViewController vous évite beaucoup de maux de tête et il ne faut que quelques lignes de code pour s'intégrer à une application.


Projet tutoriel

Configuration du projet

Pour illustrer à quel point il est facile d’utiliser UIActivityViewController et SLComposeViewController, nous allons créer une simple application Shoebox pour partager des photos. L'application permet aux utilisateurs de capturer une image, d'ajouter une légende et de la partager avec ses amis et sa famille. L'exemple d'application vous montrera à quel point il est facile de partager du contenu de manière dynamique dans iOS 6..

Commencez par créer un nouveau projet dans Xcode. Sélectionnez le Application à vue unique modèle de la liste des modèles (figure 3). Nommez votre application Sharetastic, entrez un nom et un identifiant de société, configurez l'iPhone pour la famille d'appareils et vérifiez Utiliser le comptage automatique des références. Décochez les cases restantes pour ce projet (figure 4). Spécifiez où vous souhaitez enregistrer le projet et cliquez sur le bouton Créer bouton.


figure 3
Figure 4

Ajout du cadre social

Puisque notre application utilisera le cadre social, nous devons l’ajouter à notre projet. Sélectionnez le projet dans le Navigateur de projet et sélectionnez la cible à droite (figure 5). Sélectionnez le Phases de construction onglet en haut, ouvrez le Lien binaire avec des bibliothèques tiroir, cliquez sur le bouton plus, puis choisissez Social.framework de la liste (figure 5). Notre projet est maintenant lié avec succès au cadre social.


Figure 5

N'oubliez pas d'ajouter une déclaration d'importation en haut du fichier d'en-tête de notre contrôleur de vue afin d'importer les en-têtes du cadre social dans votre projet..

 #importation  #importation 

Outlets et Actions

Avant de créer l'interface utilisateur de notre application, nous devons ajouter les sorties et les actions nécessaires au fichier d'en-tête de notre contrôleur de vue. Quatre points de vente au total doivent être ajoutés, un UITextField pour entrer la légende de l'image, un UIImageView l'affichage de l'image capturée, et deux UIButton les instances. Appuyez sur le premier bouton pour envoyer l'image et la légende au compte Facebook de l'utilisateur. Appuyez sur le deuxième bouton pour faire apparaître une instance de UIActivityViewController, présenter à l'utilisateur un certain nombre d'options pour le partage de l'image et de la légende. Comme vous avez pu le deviner, chaque bouton est lié à un IBAction. L'extrait de code ci-dessous montre à quoi devrait ressembler le fichier d'en-tête de notre contrôleur de vue:

 #importation  #importation  @interface RPViewController: UIViewController @property (faible, non atomique) IBOutlet UITextField * captionTextField; @property (faible, non atomique) IBOutlet UIImageView * imageView; @property (faible, non atomique) IBOutlet UIButton * facebookButton; @property (faible, non atomique) IBOutlet UIButton * shareButton; - (IBAction) facebook: (id) expéditeur; - Partage (IBAction): expéditeur (id); @fin

Interface utilisateur

Il est temps de passer au fichier XIB de notre contrôleur de vue. Pour simplifier les choses, nous n’utiliserons pas les nouvelles fonctionnalités d’Iol6 Autolayout de ce chapitre. Avec le fichier XIB du contrôleur de vue sélectionné, ouvrez le Inspecteur de fichier à droite et décochez la case Utiliser autolayout case à cocher.

Avec le fichier XIB du contrôleur de vue sélectionné, commencez par faire glisser un champ de texte dans la vue du contrôleur de vue et positionnez-le tout en haut de la vue. (figure 6). Configurez le champ de texte en ouvrant le Inspecteur d'attributs et changez son texte fictif en Saisir légende. Avec le champ de texte toujours sélectionné, ouvrez le Inspecteur de connexions et connectez le champ de texte déléguer sortie au Propriétaire du fichier objet à gauche. Cela signifie que le contrôleur de vue agira en tant que délégué du champ de texte. La raison de cela deviendra claire dans quelques minutes. Assurez-vous que vous avez également connecté le captionTextField sortie sur l'objet de champ de texte à l'écran.


Figure 6

Faites glisser une instance de UIImageView depuis la bibliothèque vers la vue du contrôleur de vue et positionnez-le sous le champ de texte (figure 6). Modifier ses dimensions à 280 points de 280 points. Ouvrez le Inspecteur d'attributs encore une fois et changez le mode d'affichage de l'image (mode contenu) propriété à Aspect Fit et assurez-vous de vérifier Interaction utilisateur activée. Ce dernier point est important dans la mesure où nous allons bientôt ajouter un outil de reconnaissance des gestes tactiles à la vue. Si nous n'activons pas l'interaction de l'utilisateur pour la vue d'image, la reconnaissance des gestes tactiles ne fonctionnera pas. N'oubliez pas de connecter la prise du contrôleur de vue à notre vue d'image. Le moyen le plus simple de le faire est d’appuyer sur le bouton Ctrl clé, en la faisant glisser de la vue d'image vers l'objet Propriétaire du fichier et en sélectionnant le point de vente approprié.

Pour finaliser l'interface utilisateur de notre application, ajoutez deux UIButton instances à la vue de notre contrôleur de vue et placez-les sous la vue de l'image (figure 6). Donnez au titre du haut un titre de Facebook et le bouton du bas un titre de Partager. Connectez les sorties restantes comme décrit ci-dessus. En outre, connectez les deux actions de notre contrôleur de vue en appuyant sur la touche Ctrl, en les faisant glisser de l'objet Propriétaire du fichier vers chaque bouton, puis en sélectionnant l'action correspondante. L'interface utilisateur est prête. Maintenant il est temps de commencer à écrire du code pour que tout fonctionne!

Délégation

Il reste encore une chose à ajouter au fichier d’en-tête de notre contrôleur de vue. Puisque nous allons utiliser UIImagePickerController pour prendre des images, notre contrôleur de vue doit se conformer à la fois à la UINavigationControllerDelegate et UIImagePickerControllerDelegate protocoles. En outre, comme je l’ai mentionné il ya quelques instants, notre contrôleur de vue remplit également les fonctions de délégué du champ de texte de légende. Cela signifie que le contrôleur de vue doit se conformer à la UITextFieldDelegate protocole aussi bien. Consultez le fichier d'en-tête mis à jour de notre contrôleur de vue pour obtenir des précisions..

 #importation  #importation  @interface RPViewController: UIViewController  @property (faible, non atomique) IBOutlet UITextField * captionTextField; @property (faible, non atomique) IBOutlet UIImageView * imageView; @property (faible, non atomique) IBOutlet UIButton * facebookButton; @property (faible, non atomique) IBOutlet UIButton * shareButton; - (IBAction) facebook: (id) expéditeur; - Partage (IBAction): expéditeur (id); @fin

Premières choses d'abord

Dans notre fichier de mise en œuvre du contrôleur, nous commençons par étendre la définition de la classe et en ajoutant une propriété privée. Il est recommandé de ne pas exposer toutes les propriétés d'une classe en les déclarant dans le fichier d'en-tête, ce qui permet notamment d'étendre la définition de la classe dans le fichier d'implémentation. Après la première déclaration d'importation et avant la @la mise en oeuvre directive, ajoutez l’extrait de code ci-dessous pour déclarer une nouvelle propriété privée. La propriété contiendra une référence à l'image que l'utilisateur prend avec la caméra du périphérique..

 @interface RPViewController () @property (strong, nonatomic) UIImage * image; @fin

Une fonctionnalité intéressante de Xcode 4.4+ est qu'il n'est plus nécessaire de synthétiser les accesseurs de propriétés. Ceci est fait pour vous dans les coulisses et il suit les conventions de nommage d'Apple. Dans notre exemple, une variable d’instance sera créée avec un nom de _image et les accesseurs de notre propriété d'image sont automatiquement synthétisés pour nous.

Voir le cycle de vie

J'aime toujours commencer par implémenter le cycle de vie d'une vue. De plus, je préfère aussi garder le viewDidLoad méthode short en ajoutant des méthodes d'assistance. Une méthode que je crée presque toujours est setupView, qui prend en charge la configuration et la configuration de la vue du contrôleur de vue. Jetons un coup d'oeil au viewDidLoad et setupView méthodes pour avoir une idée de ce que je veux dire.

 - (void) viewDidLoad [super viewDidLoad]; // Vue d'installation [auto setupView];  - (void) setupView // Ajouter un identificateur de geste UITapGestureRecognizer * tgr = [[UITapGestureRecognizer alloc]] initWithTarget: autoaction: @selector (takeImage :)]; [self.imageView addGestureRecognizer: tgr]; // Mise à jour de la vue [self updateView]; 

Comme vous pouvez le voir, le setupView la méthode n'est pas complexe. Nous ajoutons un outil de reconnaissance des gestes tactiles à la vue de l'image afin que l'utilisateur puisse capturer une image en appuyant sur la vue de l'image dans notre interface utilisateur. Nous commençons par initialiser un outil de reconnaissance des gestes du toucher, puis nous l'ajoutons à notre vue d'image. La reconnaissance de gestes tactiles envoie le message snapImage: à notre contrôleur de vue lorsque l'utilisateur appuie sur la vue de l'image. Nous allons jeter un oeil à la snapImage: méthode en une seconde.

À la fin de setupView méthode, nous appelons la méthode updateView. Là encore, c’est une méthode d’aide que j’utilise très souvent car elle me permet de regrouper la logique associée à la mise à jour de la vue. Jetons un coup d'œil à la updateView méthode.

 - (void) updateView BOOL sharingEnabled = self.image? OUI NON; float sharingAlpha = sharingEnabled? 1,0: 0,5; self.facebookButton.enabled = sharingEnabled; self.facebookButton.alpha = sharingAlpha; self.shareButton.enabled = sharingEnabled; self.shareButton.alpha = sharingAlpha; 

Comme le nom de la méthode l'implique, la méthode met simplement à jour la vue et ses sous-vues. Nous commençons par vérifier si une image est disponible en vérifiant si notre propriété d'image est définie. Si nous avons une image avec laquelle travailler, nous activons Facebook et les boutons de partage, et définissons leurs valeurs alpha à 1.0. Si une image n'est pas disponible, c'est-à-dire si l'utilisateur n'en a pas encore pris une, nous désactivons les deux boutons et les rendons légèrement transparents pour indiquer à l'utilisateur que les boutons sont désactivés..

Prendre une image

En profitant de UIImagePickerController , la capture d'images est un processus simple et direct. Commençons par examiner le snapImage: méthode qui est invoquée par le dispositif de reconnaissance des gestes du toucher lorsque l'utilisateur appuie sur la vue de l'image. Tout d'abord, une instance de UIImagePickerController est initialisé et son délégué est défini sur self, c’est-à-dire notre contrôleur de vue. Ensuite, nous demandons au système d’exploitation si une caméra est disponible en appelant isSourceTypeAvailable sur le UIImagePickerController classe et en passant UIImagePickerControllerSourceTypeCamera comme argument. En fonction de la valeur de retour, nous définissons le type de source de notre UIImagePickerController exemple. En tant que sécurité intégrée, le type de source est défini sur UIImagePickerControllerSourceTypePhotoLibrary si aucune caméra n'est disponible pour une raison quelconque. Cela signifie que l'utilisateur peut sélectionner une image dans la bibliothèque de photos du périphérique. Enfin, le contrôleur de sélecteur d'images est présenté à l'utilisateur.

 - (void) takeImage: (UITapGestureRecognizer *) tgr // Initialise le contrôleur de sélection d'images UIImagePickerController * ip = [[UIImagePickerController alloc] init]; // Set Delegate [ip setDelegate: self]; if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]) // Définissez le type de source sur Camera [ip setSourceType: UIImagePickerControllerSourceTypeCamera];  else // Définir le type de source sur Photothèque [ip setSourceType: UIImagePickerControllerSourceTypePhotoLibrary];  // Contrôleur de vue présent [self presentViewController: ip animated: YES complétion: nil]; 

Pouvez-vous deviner quelle est la prochaine étape? Nous devons mettre en œuvre les méthodes du UIImagePickerControllerDelegate protocole. Le protocole a deux méthodes, imagePickerController: didFinishPickingMediaWithInfo: et imagePickerControllerDidCancel:. Laissez-moi vous expliquer chaque méthode.

Dans imagePickerController: didFinishPickingMediaWithInfo:, nous commençons par stocker une référence à l'image originale non modifiée. Dans les prochaines lignes de code, nous affectons l'image d'origine à notre propriété d'image et mettons à jour la vue. Rappelez-vous que cela activera Facebook et les boutons de partage. Enfin, nous rejetons le contrôleur de sélecteur d'images.

 - (void) imagePickerController: (UIImagePickerController *) sélecteur didFinishPickingMediaWithInfo: (NSDictionary *) info UIImage * originalImage = [info objectForKey: UIImagePickerControllerOriginalImage]; if (originalImage) self.image = originalImage; // Mise à jour de la vue [self updateView];  // Supprimez le contrôleur de sélecteur d'images [selfJeviewControllerAnimated: YES complétion: nil]; 

La deuxième méthode déléguée contient une seule ligne de code. Si l'utilisateur appuie sur le bouton d'annulation, le contrôleur du sélecteur d'images est renvoyé sans plus tarder..

 - (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker // Contrôleur de rejet d'image, sélecteur [auto-licenciement ViewControllerAnimated: YES complétion: nil]; 

Les détails sont importants

Avant de mettre en œuvre le Facebook: et partager: actions, je veux faire un léger détour. Pourquoi n'avons-nous pas affecté l'image nouvellement capturée à la propriété image de la vue d'image? L'affectation de la nouvelle image capturée à la propriété image de notre vue d'image est une option parfaitement viable, mais j'ai adopté une approche différente. Depuis l'introduction du @ synthétiser directive, les gens oublient souvent à quel point les setters et les getters peuvent être utiles. Laissez-moi vous expliquer ce que je veux dire avec un exemple.

Dans notre exemple d'application, j'ai remplacé le paramètre de définition de la propriété d'image de notre contrôleur de vue. Cela me permet de (1) regrouper le code associé dans un emplacement et (2) de mettre à jour la vue de l'image uniquement lorsque celle-ci est modifiée. Cela peut sembler être un détail très peu utilisé à ce stade, mais il montre comment nous pouvons déjà commencer à optimiser notre code de manière subtile, ce qui affectera la lisibilité du code et même ses performances. Dans cet exemple particulier, cela n’affectera pas les performances de notre application, mais il est bon d’appliquer les meilleures pratiques chaque fois que vous le souhaitez..

Ajoutez les éléments suivants au fichier d'implémentation maintenant:

 - (void) setImage: (UIImage *) image if (_image! = image) _image = image; // Mettre à jour la vue d'image self.imageView.image = _image; 

UITextFieldDelegate

Avant de pouvoir partager des images, nous devons implémenter une méthode de délégation du UITextFieldDelegate protocole, c'est, textFieldShouldReturn:. Dans cette méthode de délégation, nous résignons le champ de texte en tant que premier répondeur si l'utilisateur appuie sur le bouton de retour du clavier. Cela fera disparaître le clavier et révélera les boutons de partage en dessous.

 - (BOOL) textFieldShouldReturn: (UITextField *) textField // Renvoyer le premier répondant [textField resignFirstResponder]; retourner OUI; 

Partageons

Il est temps de nous salir les mains avec le cadre social et UIActivityViewController. Commençons par implémenter le Facebook: méthode. Il illustrera comment utiliser SLComposeViewController. Jetez un coup d'œil à son implémentation ci-dessous et décrivons-le étape par étape.

 - (IBAction) facebook: (id) expéditeur if ([SLComposeViewController estAvailableForServiceType: SLServiceTypeFacebook]) // Initialise le contrôleur d'affichage de la composition SCLC: // Configurer Compose View Controller [vc setInitialText: self.captionTextField.text]; [vc addImage: self.image]; // Présent Compose View Controller [self presentViewController: vc animé: YES achèvement: nil];  else NSString * message = @ "Il semble que nous ne puissions pas communiquer avec Facebook pour le moment ou que vous n'ayez pas encore ajouté votre compte Facebook à cet appareil. Accédez à l'application Paramètres pour ajouter votre compte Facebook à cet appareil."; UIAlertView * alertView = [[UIAlertView alloc] initWithTitle: @ "Oups" message: délégué de message: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [alertView show]; 

Comme je l'ai mentionné précédemment, il est nécessaire de commencer par demander au système d'exploitation si le service que nous ciblons est disponible. Si isAvailableForServiceType: résultats NON, nous affichons une vue d'alerte indiquant à l'utilisateur quel pourrait être le problème. Si le service est disponible, nous initialisons toutefois une instance de SLComposeViewController en invoquant la méthode de classe composeViewControllerForServiceType:. L'argument que nous passons à la méthode de classe est SLServiceTypeFacebook, ce qui indique que nous visons la plateforme Facebook.

Même si notre utilisateur peut modifier le message avant de l'envoyer à Facebook, nous le complétons avec le contenu du champ de texte de légende et attachons l'image capturée au message. Enfin, nous présentons le contrôleur de vue de composition à l'utilisateur. Il appartient ensuite à l'utilisateur de modifier, d'annuler ou de publier le message. L'utilisateur est en contrôle. Ceci est important à retenir, en particulier lors du chapitre suivant, où l'utilisateur ne saura pas toujours ce que notre application fait en coulisse. À ce stade, notre application est prête à être testée. Construisez et exécutez votre application sur un périphérique de test et essayez-la vous-même.!

Twitter, Facebook ou Sina Weibo

Comme je l'ai mentionné précédemment, l'un des points forts du cadre social est la facilité avec laquelle il est possible de remplacer un réseau social par un autre en modifiant le type de service. Essayons cela en remplaçant les deux instances de SLServiceTypeFacebook avec SLServiceTypeTwitter. Avec ce simple changement, nous pouvons maintenant partager nos images avec nos abonnés Twitter.

Partage sur les stéroïdes

Notre application n'est pas encore terminée. Nous devons encore mettre en œuvre le partager: méthode. Dans cette méthode, nous utilisons les UIActivityViewController classe pour partager l’image capturée et la légende associée. Regardez l'implémentation de la méthode ci-dessous.

 - (IBAction) share: (id) sender // Items d'activité UIImage * image = self.image; NSString * caption = self.captionTextField.text; NSArray * activityItem